From dadacf10dc9e11046e2c8c49347174e71cef3fa3 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Sat, 22 Feb 2020 20:17:28 +0000 Subject: hex: introduce parsing variants taking hash algorithms Introduce variants of get_oid_hex and parse_oid_hex that parse an arbitrary hash algorithm, implementing internal functions to avoid duplication. These functions can be used in the transport code to parse refs properly. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano --- hex.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'hex.c') diff --git a/hex.c b/hex.c index fd7f00c43f..10e24dc2e4 100644 --- a/hex.c +++ b/hex.c @@ -47,32 +47,51 @@ int hex_to_bytes(unsigned char *binary, const char *hex, size_t len) return 0; } -int get_sha1_hex(const char *hex, unsigned char *sha1) +static int get_hash_hex_algop(const char *hex, unsigned char *hash, + const struct git_hash_algo *algop) { int i; - for (i = 0; i < the_hash_algo->rawsz; i++) { + for (i = 0; i < algop->rawsz; i++) { int val = hex2chr(hex); if (val < 0) return -1; - *sha1++ = val; + *hash++ = val; hex += 2; } return 0; } +int get_sha1_hex(const char *hex, unsigned char *sha1) +{ + return get_hash_hex_algop(hex, sha1, the_hash_algo); +} + +int get_oid_hex_algop(const char *hex, struct object_id *oid, + const struct git_hash_algo *algop) +{ + return get_hash_hex_algop(hex, oid->hash, algop); +} + int get_oid_hex(const char *hex, struct object_id *oid) { - return get_sha1_hex(hex, oid->hash); + return get_oid_hex_algop(hex, oid, the_hash_algo); } -int parse_oid_hex(const char *hex, struct object_id *oid, const char **end) +int parse_oid_hex_algop(const char *hex, struct object_id *oid, + const char **end, + const struct git_hash_algo *algop) { - int ret = get_oid_hex(hex, oid); + int ret = get_hash_hex_algop(hex, oid->hash, algop); if (!ret) - *end = hex + the_hash_algo->hexsz; + *end = hex + algop->hexsz; return ret; } +int parse_oid_hex(const char *hex, struct object_id *oid, const char **end) +{ + return parse_oid_hex_algop(hex, oid, end, the_hash_algo); +} + char *hash_to_hex_algop_r(char *buffer, const unsigned char *hash, const struct git_hash_algo *algop) { -- cgit v1.2.3