int create_parent_dirs(const char *path);
const char *get_hostname(void);
const char *tmp_string(void);
-char *format_hash_as_string(const unsigned char *hash, unsigned size);
+char *format_hash_as_string(const unsigned char *hash, int size);
int create_hash_dir(char **dir, const char *hash, const char *cache_dir);
int create_cachedirtag(const char *dir);
char *format(const char *format, ...) ATTR_FORMAT(printf, 1, 2);
CHECK_STR_EQ_FREE2("dir1/dir2", dirname("dir1/dir2/"));
}
+TEST(format_hash_as_string)
+{
+ unsigned char hash[16] = {
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"};
+
+ CHECK_STR_EQ_FREE2("00000000000000000000000000000000",
+ format_hash_as_string(hash, -1));
+ CHECK_STR_EQ_FREE2("00000000000000000000000000000000-0",
+ format_hash_as_string(hash, 0));
+ hash[0] = 17;
+ hash[15] = 42;
+ CHECK_STR_EQ_FREE2("1100000000000000000000000000002a-12345",
+ format_hash_as_string(hash, 12345));
+}
+
TEST_SUITE_END
return ret;
}
-/* Return the hash result as a hex string. Caller frees. */
+/*
+ * Return the hash result as a hex string. Size -1 means don't include size
+ * suffix. Caller frees.
+ */
char *
-format_hash_as_string(const unsigned char *hash, unsigned size)
+format_hash_as_string(const unsigned char *hash, int size)
{
char *ret;
int i;
for (i = 0; i < 16; i++) {
sprintf(&ret[i*2], "%02x", (unsigned) hash[i]);
}
- sprintf(&ret[i*2], "-%u", size);
+ if (size >= 0) {
+ sprintf(&ret[i*2], "-%u", size);
+ }
return ret;
}