]> git.saurik.com Git - apt.git/commitdiff
Do nothing in FileFd::Write() if Size is 0
authorJulian Andres Klode <jak@debian.org>
Sat, 19 Dec 2015 12:01:14 +0000 (13:01 +0100)
committerJulian Andres Klode <jak@debian.org>
Sat, 19 Dec 2015 12:02:50 +0000 (13:02 +0100)
Turn the do-while loop into while loops, so it simply does nothing
if the Size is already 0.

This reverts commit c0b271edc2f6d9e5dea5ac82fbc911f0e3adfa7a which
introduced a fix for a specific instance of the issue in the
CopyFile() function.

Closes: #808381
apt-pkg/contrib/fileutl.cc

index 1ffa407bc9cd017259a1366135bcffb1afffa7d3..0d1c272abd8d9ec76cb5049f5dac8192d848dfdb 100644 (file)
@@ -165,7 +165,7 @@ bool CopyFile(FileFd &From,FileFd &To)
    unsigned long long ToRead = 0;
    do {
       if (From.Read(Buf.get(),BufSize, &ToRead) == false ||
-         (ToRead > 0 && To.Write(Buf.get(),ToRead) == false))
+         To.Write(Buf.get(),ToRead) == false)
         return false;
    } while (ToRead != 0);
 
@@ -1654,9 +1654,9 @@ char* FileFd::ReadLine(char *To, unsigned long long const Size)
 /* */
 bool FileFd::Write(const void *From,unsigned long long Size)
 {
-   ssize_t Res;
+   ssize_t Res = 1;
    errno = 0;
-   do
+   while (Res > 0 && Size > 0)
    {
       if (false)
         /* dummy so that the rest can be 'else if's */;
@@ -1725,7 +1725,6 @@ bool FileFd::Write(const void *From,unsigned long long Size)
       if (d != NULL)
         d->seekpos += Res;
    }
-   while (Res > 0 && Size > 0);
    
    if (Size == 0)
       return true;
@@ -1734,9 +1733,9 @@ bool FileFd::Write(const void *From,unsigned long long Size)
 }
 bool FileFd::Write(int Fd, const void *From, unsigned long long Size)
 {
-   ssize_t Res;
+   ssize_t Res = 1;
    errno = 0;
-   do
+   while (Res > 0 && Size > 0)
    {
       Res = write(Fd,From,Size);
       if (Res < 0 && errno == EINTR)
@@ -1747,7 +1746,6 @@ bool FileFd::Write(int Fd, const void *From, unsigned long long Size)
       From = (char const *)From + Res;
       Size -= Res;
    }
-   while (Res > 0 && Size > 0);
 
    if (Size == 0)
       return true;