summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-09-28 04:06:43 -0500
committerDan McGee <dan@archlinux.org>2011-09-28 04:48:42 -0500
commit98e0371ae38d748fb04cec4759addb54e3a618ea (patch)
treef452b924402f271e77a41776ce11895f57d1510f
parentf66f9f11cd010a05efe28d0607abbf29ff8dffa5 (diff)
downloadpacman-98e0371ae38d748fb04cec4759addb54e3a618ea.tar.xz
Use the full buffer when computing md5/sha256 sums
No wonder these were slower than expected. We were only reading 4 (32-bit) or 8 (64-bit) bytes at a time and feeding it to the hash functions. Define a buffer size constant and use it correctly so we feed 8K at a time into the hashing algorithm. This cut one larger `-Sw --noconfirm` operation, with nothing to actually download so only timing integrity, from 3.3s to 1.7s. This has been broken since the original commit eba521913d6 introducing OpenSSL usage for crypto hash functions. Boy do I feel stupid. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/util.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index a15eb965..18d1c365 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -741,6 +741,8 @@ int _alpm_lstat(const char *path, struct stat *buf)
}
#ifdef HAVE_LIBSSL
+#define BUFFER_SIZE 8192
+
static int md5_file(const char *path, unsigned char output[16])
{
FILE *f;
@@ -748,7 +750,7 @@ static int md5_file(const char *path, unsigned char output[16])
MD5_CTX ctx;
unsigned char *buf;
- CALLOC(buf, 8192, sizeof(unsigned char), return 1);
+ CALLOC(buf, BUFFER_SIZE, sizeof(unsigned char), return 1);
if((f = fopen(path, "rb")) == NULL) {
free(buf);
@@ -757,7 +759,7 @@ static int md5_file(const char *path, unsigned char output[16])
MD5_Init(&ctx);
- while((n = fread(buf, 1, sizeof(buf), f)) > 0) {
+ while((n = fread(buf, 1, BUFFER_SIZE, f)) > 0) {
MD5_Update(&ctx, buf, n);
}
@@ -783,7 +785,7 @@ static int sha2_file(const char *path, unsigned char output[32], int is224)
SHA256_CTX ctx;
unsigned char *buf;
- CALLOC(buf, 8192, sizeof(unsigned char), return 1);
+ CALLOC(buf, BUFFER_SIZE, sizeof(unsigned char), return 1);
if((f = fopen(path, "rb")) == NULL) {
free(buf);
@@ -796,7 +798,7 @@ static int sha2_file(const char *path, unsigned char output[32], int is224)
SHA256_Init(&ctx);
}
- while((n = fread(buf, 1, sizeof(buf), f)) > 0) {
+ while((n = fread(buf, 1, BUFFER_SIZE, f)) > 0) {
if(is224) {
SHA224_Update(&ctx, buf, n);
} else {