]> git.saurik.com Git - apt.git/commitdiff
enable Hashes::AddFD() to skip creation of certain hashes
authorDavid Kalnischkies <kalnischkies@gmail.com>
Wed, 13 Jul 2011 21:10:38 +0000 (23:10 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Wed, 13 Jul 2011 21:10:38 +0000 (23:10 +0200)
apt-pkg/contrib/hashes.cc
apt-pkg/contrib/hashes.h
apt-pkg/contrib/hashsum.cc
apt-pkg/contrib/hashsum_template.h

index 66ae33146403b44bfd71ffc73af02ec741674843..d217747dfb9734fc0b5279780f0f6c943e02c891 100644 (file)
@@ -107,7 +107,8 @@ string HashString::toStr() const
 // Hashes::AddFD - Add the contents of the FD                          /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-bool Hashes::AddFD(int Fd,unsigned long Size)
+bool Hashes::AddFD(int const Fd,unsigned long Size, bool const addMD5,
+                  bool const addSHA1, bool const addSHA256, bool const addSHA512)
 {
    unsigned char Buf[64*64];
    int Res = 0;
@@ -118,14 +119,18 @@ bool Hashes::AddFD(int Fd,unsigned long Size)
       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;
+        return false;
       if (ToEOF && Res == 0) // EOF
-         break;
+        break;
       Size -= Res;
-      MD5.Add(Buf,Res);
-      SHA1.Add(Buf,Res);
-      SHA256.Add(Buf,Res);
-      SHA512.Add(Buf,Res);
+      if (addMD5 == true)
+        MD5.Add(Buf,Res);
+      if (addSHA1 == true)
+        SHA1.Add(Buf,Res);
+      if (addSHA256 == true)
+        SHA256.Add(Buf,Res);
+      if (addSHA512 == true)
+        SHA512.Add(Buf,Res);
    }
    return true;
 }
index 4b6a08b1f25e91cb86c4ae77d65440aee76e3b5b..e702fcca2fd9459d2fd2e66f1b95aaf94bd764ca 100644 (file)
@@ -67,7 +67,10 @@ class Hashes
       return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.Add(Data,Size) && SHA512.Add(Data,Size);
    };
    inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
+   inline bool AddFD(int const Fd,unsigned long Size = 0)
+   { return AddFD(Fd, Size, true, true, true, true); };
+   bool AddFD(int const Fd, unsigned long Size, bool const addMD5,
+             bool const addSHA1, bool const addSHA256, bool const addSHA512);
    inline bool Add(const unsigned char *Beg,const unsigned char *End) 
                   {return Add(Beg,End-Beg);};
 };
index b97eaf831195d84946e58c41e26ddf514e8ebae7..728747d7ab00ed47b44cc36706ae88daf549d994 100644 (file)
@@ -10,11 +10,10 @@ bool SummationImplementation::AddFD(int const Fd, unsigned long Size) {
    unsigned char Buf[64 * 64];
    int Res = 0;
    int ToEOF = (Size == 0);
-   unsigned long n = sizeof(Buf);
-   if (!ToEOF)
-      n = std::min(Size, n);
    while (Size != 0 || ToEOF)
    {
+      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;
index 2847f3308bf568adfd2201b07c90de53ef3c4738..85d94c2afafdd6df9990df20b7a9d53a4eb936e1 100644 (file)
@@ -101,7 +101,7 @@ class SummationImplementation
    inline bool Add(const char *Beg, const char *End)
    { return Add((const unsigned char *)Beg, End - Beg); };
 
-   bool AddFD(int Fd, unsigned long Size);
+   bool AddFD(int Fd, unsigned long Size = 0);
 };
 
 #endif