X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=sha1.c;h=ff4dd164779bbfc74b87aa2ae54d597f02ca9241;hp=152d870ca22b9684a903bf54e43e0d33ff450928;hb=df959868d9fc4f78682da3363d15685d69d2353b;hpb=6a4992bc611881b363583b4a20fc530c770aedd8 diff --git a/sha1.c b/sha1.c index 152d870c..ff4dd164 100644 --- a/sha1.c +++ b/sha1.c @@ -25,6 +25,54 @@ /* Just some simple interfaces on top of libsha1 so that we can leave * libsha1 as untouched as possible. */ +static char * +_hex_of_sha1_digest (const unsigned char digest[SHA1_DIGEST_SIZE]) +{ + char *result, *r; + int i; + + result = xcalloc (SHA1_DIGEST_SIZE * 2 + 1, 1); + + for (r = result, i = 0; + i < SHA1_DIGEST_SIZE; + r += 2, i++) + { + sprintf (r, "%02x", digest[i]); + } + + return result; +} + +/* Create a hexadcimal string version of the SHA-1 digest of 'str' + * (including its null terminating character). + * + * This function returns a newly allocated string which the caller + * should free() when finished. + */ +char * +notmuch_sha1_of_string (const char *str) +{ + sha1_ctx sha1; + unsigned char digest[SHA1_DIGEST_SIZE]; + + sha1_begin (&sha1); + + sha1_hash ((unsigned char *) str, strlen (str) + 1, &sha1); + + sha1_end (digest, &sha1); + + return _hex_of_sha1_digest (digest); +} + +/* Create a hexadecimal string version of the SHA-1 digest of the + * contents of the named file. + * + * This function returns a newly allocated string which the caller + * should free() when finished. + * + * If any error occurs while reading the file, (permission denied, + * file not found, etc.), this function returns NULL. + */ char * notmuch_sha1_of_file (const char *filename) { @@ -34,8 +82,7 @@ notmuch_sha1_of_file (const char *filename) size_t bytes_read; sha1_ctx sha1; unsigned char digest[SHA1_DIGEST_SIZE]; - char *result, *r; - int i; + char *result; file = fopen (filename, "r"); if (file == NULL) @@ -59,16 +106,7 @@ notmuch_sha1_of_file (const char *filename) sha1_end (digest, &sha1); - result = calloc (SHA1_DIGEST_SIZE * 2 + 1, 1); - if (result == NULL) - return NULL; - - for (r = result, i = 0; - i < SHA1_DIGEST_SIZE; - r += 2, i++) - { - sprintf (r, "%02x", digest[i]); - } + result = _hex_of_sha1_digest (digest); fclose (file);