X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/021988eaf4dd67c73dbbb26302e8466836fc7566..319810767180e5c57c296b06c93e3ebec9f36a8e:/apt-pkg/contrib/md5.cc diff --git a/apt-pkg/contrib/md5.cc b/apt-pkg/contrib/md5.cc index e656f3221..c0fa8493d 100644 --- a/apt-pkg/contrib/md5.cc +++ b/apt-pkg/contrib/md5.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: md5.cc,v 1.4 1999/10/25 03:36:41 jgg Exp $ +// $Id: md5.cc,v 1.12 2001/05/13 05:15:03 jgg Exp $ /* ###################################################################### MD5Sum - MD5 Message Digest Algorithm. @@ -28,33 +28,31 @@ Still in the public domain. The classes use arrays of char that are a specific size. We cast those - arrays to UINT32's and go from there. This allows us to advoid using - config.h in a public header or internally newing memory. + arrays to uint8_t's and go from there. This allows us to advoid using + the uncommon inttypes.h in a public header or internally newing memory. + In theory if C9x becomes nicely accepted ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#ifdef __GNUG__ -#pragma implementation "apt-pkg/md5.h" -#endif - #include #include +#include #include -#include #include -#include +#include // For htonl #include +#include /*}}}*/ // byteSwap - Swap bytes in a buffer /*{{{*/ // --------------------------------------------------------------------- -/* This byteswap function will swap byte in a buffer of data */ +/* Swap n 32 bit longs in given buffer */ #ifdef WORDS_BIGENDIAN static void byteSwap(uint32_t *buf, unsigned words) { - unsigned char *p = (unsigned char *)buf; + uint8_t *p = (uint8_t *)buf; do { @@ -189,7 +187,7 @@ MD5SumValue::MD5SumValue() /* Converts the hex string into a set of chars */ bool MD5SumValue::Set(string Str) { - return Hex2Num(Str.begin(),Str.end(),Sum,sizeof(Sum)); + return Hex2Num(Str,Sum,sizeof(Sum)); } /*}}}*/ // MD5SumValue::Value - Convert the number into a string /*{{{*/ @@ -295,11 +293,16 @@ bool MD5Summation::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))) - return false; + unsigned n = sizeof(Buf); + if (!ToEOF) n = min(Size,(unsigned long)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); }