diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2011-08-08 15:25:43 +0200 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2011-08-08 15:25:43 +0200 |
commit | 29bc06137f829d51608fe697f3e27125d883fcef (patch) | |
tree | 7121486de1ce74a3e979f3dc0d6bc60b8a59dfe7 /apt-pkg/contrib/hashsum.cc | |
parent | f96bcef72c47ab32f4742da2673a12b3a47d8367 (diff) | |
parent | a1e9379a86f199817d275b2d28d1a6b61039fcaa (diff) |
merged from ubuntu-plus-debian-experimental
Diffstat (limited to 'apt-pkg/contrib/hashsum.cc')
-rw-r--r-- | apt-pkg/contrib/hashsum.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/apt-pkg/contrib/hashsum.cc b/apt-pkg/contrib/hashsum.cc new file mode 100644 index 000000000..728747d7a --- /dev/null +++ b/apt-pkg/contrib/hashsum.cc @@ -0,0 +1,27 @@ +// Cryptographic API Base + +#include <unistd.h> +#include "hashsum_template.h" + +// Summation::AddFD - Add content of file into the checksum /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool SummationImplementation::AddFD(int const Fd, unsigned long Size) { + unsigned char Buf[64 * 64]; + int Res = 0; + int ToEOF = (Size == 0); + 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; + if (ToEOF && Res == 0) // EOF + break; + Size -= Res; + Add(Buf,Res); + } + return true; +} + /*}}}*/ |