]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/fileutl.cc
continue reading in xz even if it outputs nothing
[apt.git] / apt-pkg / contrib / fileutl.cc
index ba79720d803e01ce7dc28836bf8fdea3ee3dc845..69406a9bf11f30c348cce891e7ec494f9c971f56 100644 (file)
@@ -1430,7 +1430,15 @@ bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual)
            errno = 0;
         }
         else
+        {
            Res = Size - d->lzma->stream.avail_out;
+           if (Res == 0)
+           {
+              // lzma run was okay, but produced no output…
+              Res = -1;
+              errno = EINTR;
+           }
+        }
       }
 #endif
       else
@@ -1439,7 +1447,12 @@ bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual)
       if (Res < 0)
       {
         if (errno == EINTR)
+        {
+           // trick the while-loop into running again
+           Res = 1;
+           errno = 0;
            continue;
+        }
         if (false)
            /* dummy so that the rest can be 'else if's */;
 #ifdef HAVE_ZLIB