aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--reftable/basics.h8
-rw-r--r--reftable/reader.c10
-rw-r--r--reftable/writer.c16
3 files changed, 29 insertions, 5 deletions
diff --git a/reftable/basics.h b/reftable/basics.h
index 7aa46d7c30..bcab0b529b 100644
--- a/reftable/basics.h
+++ b/reftable/basics.h
@@ -150,4 +150,12 @@ int common_prefix_size(struct reftable_buf *a, struct reftable_buf *b);
int hash_size(uint32_t id);
+/*
+ * Format IDs that identify the hash function used by a reftable. Note that
+ * these constants end up on disk and thus mustn't change. The format IDs are
+ * "sha1" and "s256" in big endian, respectively.
+ */
+#define REFTABLE_FORMAT_ID_SHA1 ((uint32_t) 0x73686131)
+#define REFTABLE_FORMAT_ID_SHA256 ((uint32_t) 0x73323536)
+
#endif
diff --git a/reftable/reader.c b/reftable/reader.c
index 90dc950b57..64eb6938ef 100644
--- a/reftable/reader.c
+++ b/reftable/reader.c
@@ -109,16 +109,18 @@ static int parse_footer(struct reftable_reader *r, uint8_t *footer,
if (r->version == 1) {
r->hash_id = GIT_SHA1_FORMAT_ID;
} else {
- r->hash_id = get_be32(f);
- switch (r->hash_id) {
- case GIT_SHA1_FORMAT_ID:
+ switch (get_be32(f)) {
+ case REFTABLE_FORMAT_ID_SHA1:
+ r->hash_id = GIT_SHA1_FORMAT_ID;
break;
- case GIT_SHA256_FORMAT_ID:
+ case REFTABLE_FORMAT_ID_SHA256:
+ r->hash_id = GIT_SHA256_FORMAT_ID;
break;
default:
err = REFTABLE_FORMAT_ERROR;
goto done;
}
+
f += 4;
}
diff --git a/reftable/writer.c b/reftable/writer.c
index fd136794d5..9aa45de634 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -103,8 +103,22 @@ static int writer_write_header(struct reftable_writer *w, uint8_t *dest)
put_be64(dest + 8, w->min_update_index);
put_be64(dest + 16, w->max_update_index);
if (writer_version(w) == 2) {
- put_be32(dest + 24, w->opts.hash_id);
+ uint32_t hash_id;
+
+ switch (w->opts.hash_id) {
+ case GIT_SHA1_FORMAT_ID:
+ hash_id = REFTABLE_FORMAT_ID_SHA1;
+ break;
+ case GIT_SHA256_FORMAT_ID:
+ hash_id = REFTABLE_FORMAT_ID_SHA256;
+ break;
+ default:
+ return -1;
+ }
+
+ put_be32(dest + 24, hash_id);
}
+
return header_size(writer_version(w));
}