diff options
author | Eric Wong <normalperson@yhbt.net> | 2012-03-26 09:07:36 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2012-03-26 09:30:55 +0000 |
commit | ebe4812faf8e7a8f33b677e3b618e5b1bbe987b2 (patch) | |
tree | c4afa70cc2d92d3d985a6bba0757201e703d2556 /mgmt_fn.c | |
parent | 10c75b0d61b7f57b9b00b7fd811c77d60a131540 (diff) | |
download | cmogstored-ebe4812faf8e7a8f33b677e3b618e5b1bbe987b2.tar.gz |
SHA-1 performance is acceptable on modern systems nowadays, and some users may have existing SHA-1 checksums from existing systems (e.g. git) that make it possible to import existing checksums into the database.
Diffstat (limited to 'mgmt_fn.c')
-rw-r--r-- | mgmt_fn.c | 44 |
1 files changed, 33 insertions, 11 deletions
@@ -48,11 +48,20 @@ void mog_mgmt_fn_digest(struct mog_mgmt *mgmt, char *buf) mog_fadv_noreuse(mgmt->forward->fd, 0, 0 /* ALL */); mog_fadv_sequential(mgmt->forward->fd, 0, 0 /* ALL */); - mog_digest_init(&file->digest, GC_MD5); + mog_digest_init(&file->digest, mgmt->alg); file->pathlen = iov[0].iov_len; file->path = path; } else { - IOV_STR(&iov[1], " MD5=-1\r\n"); + switch (mgmt->alg) { + case GC_MD5: + IOV_STR(&iov[1], " MD5=-1\r\n"); + break; + case GC_SHA1: + IOV_STR(&iov[1], " SHA-1=-1\r\n"); + break; + default: + die("BUG: unhandled algorithm: %d\n", mgmt->alg); + } mog_mgmt_writev(mgmt, iov, 2); free(path); } @@ -60,7 +69,6 @@ void mog_mgmt_fn_digest(struct mog_mgmt *mgmt, char *buf) /* finishes the MD5 request */ #define CLEN(s) (sizeof(s)-1) -#define PFX " MD5=" void mog_mgmt_fn_digest_err(struct mog_mgmt *mgmt) { @@ -85,21 +93,35 @@ void mog_mgmt_fn_digest_err(struct mog_mgmt *mgmt) void mog_mgmt_fn_digest_emit(struct mog_mgmt *mgmt) { struct iovec iov[2]; - char buf[CLEN(PFX) + 32 + CLEN("\r\n")]; - char *b; + char buf[CLEN(" SHA-1=") + 40 + CLEN("\r\n")]; + char *b = buf; struct mog_fd *mfd = mgmt->forward; struct mog_file *file = &mfd->as.file; + size_t len; iov[0].iov_base = file->path; iov[0].iov_len = file->pathlen; - iov[1].iov_base = buf; - iov[1].iov_len = sizeof(buf); + /* ugh, clean this up... */ + switch (mgmt->alg) { + case GC_MD5: + b = mempcpy(b, " MD5=", CLEN(" MD5=")); + len = 32; + iov[1].iov_len = CLEN(" MD5=") + 32 + CLEN("\r\n"); + break; + case GC_SHA1: + b = mempcpy(b, " SHA-1=", CLEN(" SHA-1=")); + len = 40; + iov[1].iov_len = sizeof(buf); + break; + default: + die("BUG: unhandled algorithm: %d\n", mgmt->alg); + } - b = mempcpy(buf, PFX, CLEN(PFX)); - mog_digest_hex(&file->digest, b, 32); - b[32] = '\r'; - b[33] = '\n'; + mog_digest_hex(&file->digest, b, len); + b[len] = '\r'; + b[len + 1] = '\n'; + iov[1].iov_base = buf; mog_mgmt_writev(mgmt, iov, 2); } |