]> git.saurik.com Git - apt.git/commitdiff
implement CopyFile without using FileFd::Size()
authorDavid Kalnischkies <david@kalnischkies.de>
Mon, 7 Sep 2015 17:10:21 +0000 (19:10 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 14 Sep 2015 13:22:18 +0000 (15:22 +0200)
Pipes and such have no good Size value, but we still want to copy from
it maybe and we don't really need size as we can just as well read as
long as we get data out of a file to copy it.

Git-Dch: Ignore

apt-pkg/contrib/fileutl.cc

index 837edef4b1e015a075549c5cccbc672c7c3149c3..9f95a2a90c1c9bbe89bcbcb9b83d57df073f69e4 100644 (file)
@@ -158,24 +158,18 @@ bool CopyFile(FileFd &From,FileFd &To)
    if (From.IsOpen() == false || To.IsOpen() == false ||
         From.Failed() == true || To.Failed() == true)
       return false;
-   
+
    // Buffered copy between fds
    std::unique_ptr<unsigned char[]> Buf(new unsigned char[64000]);
-   unsigned long long Size = From.Size();
-   while (Size != 0)
-   {
-      unsigned long long ToRead = Size;
-      if (Size > 64000)
-        ToRead = 64000;
-      
-      if (From.Read(Buf.get(),ToRead) == false ||
+   constexpr unsigned long long BufSize = sizeof(Buf.get())/sizeof(Buf.get()[0]);
+   unsigned long long ToRead = 0;
+   do {
+      if (From.Read(Buf.get(),BufSize, &ToRead) == false ||
          To.Write(Buf.get(),ToRead) == false)
         return false;
-      
-      Size -= ToRead;
-   }
+   } while (ToRead != 0);
 
-   return true;   
+   return true;
 }
                                                                        /*}}}*/
 // GetLock - Gets a lock file                                          /*{{{*/