On Mon, Feb 26, 2018 at 4:11 AM, brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> wrote: > @@ -44,7 +44,7 @@ void resolve_undo_write(struct strbuf *sb, struct string_list *resolve_undo) > for (i = 0; i < 3; i++) { > if (!ui->mode[i]) > continue; > - strbuf_add(sb, ui->sha1[i], 20); > + strbuf_add(sb, ui->oid[i].hash, the_hash_algo->rawsz); > } > } > } > @@ -89,7 +89,7 @@ struct string_list *resolve_undo_read(const char *data, unsigned long size) > continue; > if (size < 20) > goto error; > - hashcpy(ui->sha1[i], (const unsigned char *)data); > + hashcpy(ui->oid[i].hash, (const unsigned char *)data); > size -= 20; > data += 20; > } Here we see the same pattern again, but this time the @@ lines give better context: these are actually hash I/O. Maybe it's about time we add int oidwrite(char *, size_t , const struct object_id *); // optionally, void strbuf_addoid(struct strbuf *, const struct object_id *); int oidread(struct object_id *, const char *, size_t); for conversion from between an object_id in memory and on disk? It would probably be a straight memcpy for all hash algorithms so we don't really need new function pointers in git_hash_algo for this. -- Duy