summaryrefslogtreecommitdiff
path: root/apt-pkg/contrib/sha1.cc
diff options
context:
space:
mode:
authorMatt Zimmerman <matt.zimmerman@canonical.com>2005-02-04 03:00:00 +0000
committerMatt Zimmerman <matt.zimmerman@canonical.com>2005-02-04 03:00:00 +0000
commitdc50285d324d83548eae7e87b92d4f82b931fc30 (patch)
tree71890c7617952f78a18cb97df853e912a9e7e44e /apt-pkg/contrib/sha1.cc
parent6e6d5c40960ea4509616962c8e5e1a2cc1f133e7 (diff)
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)
Diffstat (limited to 'apt-pkg/contrib/sha1.cc')
-rw-r--r--apt-pkg/contrib/sha1.cc11
1 files changed, 8 insertions, 3 deletions
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);
}