From dc50285d324d83548eae7e87b92d4f82b931fc30 Mon Sep 17 00:00:00 2001
From: Matt Zimmerman <matt.zimmerman@canonical.com>
Date: Fri, 4 Feb 2005 03:00:00 +0000
Subject: allow SHA1Summation to process a file descriptor until EOF   * Apply
 patch from Anthony Towns to allow SHA1Summation to process a file    
 descriptor until EOF, rather than requiring that the length of input be    
 specified (Closes: #291338)

---
 apt-pkg/contrib/sha1.cc | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

(limited to 'apt-pkg/contrib')

diff --git a/apt-pkg/contrib/sha1.cc b/apt-pkg/contrib/sha1.cc
index a22b4d2b2..d7f606982 100644
--- a/apt-pkg/contrib/sha1.cc
+++ b/apt-pkg/contrib/sha1.cc
@@ -343,11 +343,16 @@ bool SHA1Summation::AddFD(int Fd,unsigned long Size)
 {
    unsigned char Buf[64 * 64];
    int Res = 0;
-   while (Size != 0)
+   int ToEOF = (Size == 0);
+   while (Size != 0 || ToEOF);
    {
-      Res = read(Fd,Buf,MIN(Size,sizeof(Buf)));
-      if (Res < 0 || (unsigned) Res != MIN(Size,sizeof(Buf)))
+      int n = sizeof(Buf);
+      if (!ToEOF) n = MIN(Size,n);
+      Res = read(Fd,Buf,n);
+      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
 	 return false;
+      if (ToEOF && Res == 0) // EOF
+         break;
       Size -= Res;
       Add(Buf,Res);
    }
-- 
cgit v1.2.3