qt: Fix IODeviceDataProvider with Process
authorAndre Heinecke <aheinecke@intevation.de>
Tue, 14 Nov 2017 13:28:32 +0000 (14:28 +0100)
committerAndre Heinecke <aheinecke@intevation.de>
Tue, 14 Nov 2017 13:28:32 +0000 (14:28 +0100)
* lang/qt/src/dataprovider.cpp (blocking_read): Keep
reading if process is not atEnd.

--
This fixes a regression in Kleopatra that uses this dataprovider
to chain the gpgtar process to the encryption / signing.

lang/qt/src/dataprovider.cpp

index 0d527a0..a025a03 100644 (file)
@@ -185,7 +185,11 @@ static qint64 blocking_read(const std::shared_ptr<QIODevice> &io, char *buffer,
                 if (p->error() == QProcess::UnknownError &&
                         p->exitStatus() == QProcess::NormalExit &&
                         p->exitCode() == 0) {
-                    return 0;
+                    if (io->atEnd()) {
+                        // EOF
+                        return 0;
+                    } // continue reading even if process ended to ensure
+                      // everything is read.
                 } else {
                     Error::setSystemError(GPG_ERR_EIO);
                     return -1;