changeset 19834:be7b05f95d7c

fix unzipping compressed info files when running the gui (bug #38305) * parser.cc (parser::open_file): Use iprocstream instead of QProcess to handle compressed info files.
author Torsten <ttl@justmail.de>
date Sat, 21 Feb 2015 00:22:23 -0500
parents a9952a647d52
children c1654224bc99
files libgui/src/qtinfo/parser.cc
diffstat 1 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/qtinfo/parser.cc	Fri Feb 20 17:16:21 2015 -0800
+++ b/libgui/src/qtinfo/parser.cc	Sat Feb 21 00:22:23 2015 -0500
@@ -29,12 +29,12 @@
 #endif
 
 #include "parser.h"
+#include "procstream.h"
 #include <QFileInfo>
 #include <QDir>
 #include <QFile>
 #include <QUrl>
 #include <QRegExp>
-#include <QProcess>
 #include <QBuffer>
 
 parser::parser(QObject *p)
@@ -96,13 +96,20 @@
   QIODevice *iodevice = 0;
   if (_compressors_map.contains (file_info.suffix ()))
     {
-      QProcess gzip;
-      gzip.start (_compressors_map.value (file_info.suffix ()).arg (file_info.absoluteFilePath ()));
+      QString command = _compressors_map.value (file_info.suffix ()).arg (file_info.absoluteFilePath ());
+      iprocstream ips (command.toStdString ());
 
-      if (!gzip.waitForFinished ())
+      if (ips.bad ())
         return 0;
 
-      QByteArray result = gzip.readAll ();
+      QByteArray result;
+      char buffer[1024];
+
+      while (! ips.eof ())
+        {
+          ips.read (buffer, sizeof (buffer));
+          result.append (buffer, ips.gcount ());
+        }
 
       QBuffer *io = new QBuffer (this);
       io->setData (result);