From 509f6f62a4b0dfd1c06dc2120ad06b9d50a1b64a Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:27:53 +0000 Subject: cache: update object ID functions for the_hash_algo Most of our code has been converted to use struct object_id for object IDs. However, there are some places that still have not, and there are a variety of places that compare equivalently sized hashes that are not object IDs. All of these hashes are artifacts of the internal hash algorithm in use, and when we switch to NewHash for object storage, all of these uses will also switch. Update the hashcpy, hashclr, and hashcmp functions to use the_hash_algo, since they are used in a variety of places to copy and manipulate buffers that need to move data into or out of struct object_id. This has the effect of making the corresponding oid* functions use the_hash_algo as well. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/cache.h b/cache.h index d49092d..f00cc81 100644 --- a/cache.h +++ b/cache.h @@ -972,7 +972,7 @@ extern const struct object_id null_oid; static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2) { - return memcmp(sha1, sha2, GIT_SHA1_RAWSZ); + return memcmp(sha1, sha2, the_hash_algo->rawsz); } static inline int oidcmp(const struct object_id *oid1, const struct object_id *oid2) @@ -992,7 +992,7 @@ static inline int is_null_oid(const struct object_id *oid) static inline void hashcpy(unsigned char *sha_dst, const unsigned char *sha_src) { - memcpy(sha_dst, sha_src, GIT_SHA1_RAWSZ); + memcpy(sha_dst, sha_src, the_hash_algo->rawsz); } static inline void oidcpy(struct object_id *dst, const struct object_id *src) @@ -1009,7 +1009,7 @@ static inline struct object_id *oiddup(const struct object_id *src) static inline void hashclr(unsigned char *hash) { - memset(hash, 0, GIT_SHA1_RAWSZ); + memset(hash, 0, the_hash_algo->rawsz); } static inline void oidclr(struct object_id *oid) -- cgit v0.10.2-6-g49f6 From 83e4b7571c7d78e8236ad87519b75a90e7902a34 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:27:54 +0000 Subject: tree-walk: replace hard-coded constants with the_hash_algo Remove the hard-coded 20-based values and replace them with uses of the_hash_algo. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/tree-walk.c b/tree-walk.c index 8f50908..c1f2708 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -26,8 +26,9 @@ static int decode_tree_entry(struct tree_desc *desc, const char *buf, unsigned l { const char *path; unsigned int mode, len; + const unsigned hashsz = the_hash_algo->rawsz; - if (size < 23 || buf[size - 21]) { + if (size < hashsz + 3 || buf[size - (hashsz + 1)]) { strbuf_addstr(err, _("too-short tree object")); return -1; } -- cgit v0.10.2-6-g49f6 From d9cd734990a5fedbf7fc34debe6c10d5d10e954a Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:27:55 +0000 Subject: hex: switch to using the_hash_algo Instead of using the GIT_SHA1_* constants, switch to using the_hash_algo to convert object IDs to and from hex format. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/hex.c b/hex.c index 8df2d63..10af1a2 100644 --- a/hex.c +++ b/hex.c @@ -50,7 +50,7 @@ int hex_to_bytes(unsigned char *binary, const char *hex, size_t len) int get_sha1_hex(const char *hex, unsigned char *sha1) { int i; - for (i = 0; i < GIT_SHA1_RAWSZ; i++) { + for (i = 0; i < the_hash_algo->rawsz; i++) { int val = hex2chr(hex); if (val < 0) return -1; @@ -69,7 +69,7 @@ int parse_oid_hex(const char *hex, struct object_id *oid, const char **end) { int ret = get_oid_hex(hex, oid); if (!ret) - *end = hex + GIT_SHA1_HEXSZ; + *end = hex + the_hash_algo->hexsz; return ret; } @@ -79,7 +79,7 @@ char *sha1_to_hex_r(char *buffer, const unsigned char *sha1) char *buf = buffer; int i; - for (i = 0; i < GIT_SHA1_RAWSZ; i++) { + for (i = 0; i < the_hash_algo->rawsz; i++) { unsigned int val = *sha1++; *buf++ = hex[val >> 4]; *buf++ = hex[val & 0xf]; -- cgit v0.10.2-6-g49f6 From 2770ccbdb23d6a02e60d5df3f70e476b8ea65262 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:27:56 +0000 Subject: commit: express tree entry constants in terms of the_hash_algo Specify these constants in terms of the size of the hash algorithm currently in use. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/commit.c b/commit.c index 0c3b75a..ff05d04 100644 --- a/commit.c +++ b/commit.c @@ -364,8 +364,8 @@ int parse_commit_buffer(struct commit *item, const void *buffer, unsigned long s struct object_id parent; struct commit_list **pptr; struct commit_graft *graft; - const int tree_entry_len = GIT_SHA1_HEXSZ + 5; - const int parent_entry_len = GIT_SHA1_HEXSZ + 7; + const int tree_entry_len = the_hash_algo->hexsz + 5; + const int parent_entry_len = the_hash_algo->hexsz + 7; if (item->object.parsed) return 0; -- cgit v0.10.2-6-g49f6 From 4b048c917f9e2cc33771b61b8f12eeac10ea8a51 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:27:57 +0000 Subject: strbuf: allocate space with GIT_MAX_HEXSZ In order to be sure we have enough space to use with any hash algorithm, use GIT_MAX_HEXSZ to allocate space. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/strbuf.c b/strbuf.c index b0716ac..0305561 100644 --- a/strbuf.c +++ b/strbuf.c @@ -921,7 +921,7 @@ void strbuf_add_unique_abbrev(struct strbuf *sb, const struct object_id *oid, int abbrev_len) { int r; - strbuf_grow(sb, GIT_SHA1_HEXSZ + 1); + strbuf_grow(sb, GIT_MAX_HEXSZ + 1); r = find_unique_abbrev_r(sb->buf + sb->len, oid, abbrev_len); strbuf_setlen(sb, sb->len + r); } -- cgit v0.10.2-6-g49f6 From 7b38efad5ed4417defaefe04d64adc7d4b55a66e Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:27:58 +0000 Subject: sha1-name: use the_hash_algo when parsing object names Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/sha1-name.c b/sha1-name.c index 60d9ef3..ba6a5a6 100644 --- a/sha1-name.c +++ b/sha1-name.c @@ -310,7 +310,7 @@ static int init_object_disambiguation(const char *name, int len, { int i; - if (len < MINIMUM_ABBREV || len > GIT_SHA1_HEXSZ) + if (len < MINIMUM_ABBREV || len > the_hash_algo->hexsz) return -1; memset(ds, 0, sizeof(*ds)); @@ -576,6 +576,8 @@ int find_unique_abbrev_r(char *hex, const struct object_id *oid, int len) struct disambiguate_state ds; struct min_abbrev_data mad; struct object_id oid_ret; + const unsigned hexsz = the_hash_algo->hexsz; + if (len < 0) { unsigned long count = approximate_object_count(); /* @@ -599,8 +601,8 @@ int find_unique_abbrev_r(char *hex, const struct object_id *oid, int len) } oid_to_hex_r(hex, oid); - if (len == GIT_SHA1_HEXSZ || !len) - return GIT_SHA1_HEXSZ; + if (len == hexsz || !len) + return hexsz; mad.init_len = len; mad.cur_len = len; @@ -706,7 +708,7 @@ static int get_oid_basic(const char *str, int len, struct object_id *oid, int refs_found = 0; int at, reflog_len, nth_prior = 0; - if (len == GIT_SHA1_HEXSZ && !get_oid_hex(str, oid)) { + if (len == the_hash_algo->hexsz && !get_oid_hex(str, oid)) { if (warn_ambiguous_refs && warn_on_object_refname_ambiguity) { refs_found = dwim_ref(str, len, &tmp_oid, &real_ref); if (refs_found > 0) { @@ -750,7 +752,7 @@ static int get_oid_basic(const char *str, int len, struct object_id *oid, int detached; if (interpret_nth_prior_checkout(str, len, &buf) > 0) { - detached = (buf.len == GIT_SHA1_HEXSZ && !get_oid_hex(buf.buf, oid)); + detached = (buf.len == the_hash_algo->hexsz && !get_oid_hex(buf.buf, oid)); strbuf_release(&buf); if (detached) return 0; -- cgit v0.10.2-6-g49f6 From 2ae2e2a1ca6e0042ff163920de95884e8ff45142 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:27:59 +0000 Subject: refs/files-backend: use the_hash_algo for writing refs In order to ensure we write the correct amount, use the_hash_algo to find the correct number of bytes for the current hash. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/refs/files-backend.c b/refs/files-backend.c index a9a066d..c546ffb 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -1676,7 +1676,7 @@ static int write_ref_to_lockfile(struct ref_lock *lock, return -1; } fd = get_lock_file_fd(&lock->lk); - if (write_in_full(fd, oid_to_hex(oid), GIT_SHA1_HEXSZ) < 0 || + if (write_in_full(fd, oid_to_hex(oid), the_hash_algo->hexsz) < 0 || write_in_full(fd, &term, 1) < 0 || close_ref_gently(lock) < 0) { strbuf_addf(err, @@ -3070,7 +3070,7 @@ static int files_reflog_expire(struct ref_store *ref_store, rollback_lock_file(&reflog_lock); } else if (update && (write_in_full(get_lock_file_fd(&lock->lk), - oid_to_hex(&cb.last_kept_oid), GIT_SHA1_HEXSZ) < 0 || + oid_to_hex(&cb.last_kept_oid), the_hash_algo->hexsz) < 0 || write_str_in_full(get_lock_file_fd(&lock->lk), "\n") < 0 || close_ref_gently(lock) < 0)) { status |= error("couldn't write %s", -- cgit v0.10.2-6-g49f6 From 1928c9449e600e83de122b3fde7bb0664eee3fa5 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:00 +0000 Subject: builtin/update-index: convert to using the_hash_algo Switch from using GIT_SHA1_HEXSZ to the_hash_algo to make the parsing of the index information hash independent. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/builtin/update-index.c b/builtin/update-index.c index a8709a2..031cef5 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -492,6 +492,7 @@ static void update_one(const char *path) static void read_index_info(int nul_term_line) { + const int hexsz = the_hash_algo->hexsz; struct strbuf buf = STRBUF_INIT; struct strbuf uq = STRBUF_INIT; strbuf_getline_fn getline_fn; @@ -529,7 +530,7 @@ static void read_index_info(int nul_term_line) mode = ul; tab = strchr(ptr, '\t'); - if (!tab || tab - ptr < GIT_SHA1_HEXSZ + 1) + if (!tab || tab - ptr < hexsz + 1) goto bad_line; if (tab[-2] == ' ' && '0' <= tab[-1] && tab[-1] <= '3') { @@ -542,8 +543,8 @@ static void read_index_info(int nul_term_line) ptr = tab + 1; /* point at the head of path */ } - if (get_oid_hex(tab - GIT_SHA1_HEXSZ, &oid) || - tab[-(GIT_SHA1_HEXSZ + 1)] != ' ') + if (get_oid_hex(tab - hexsz, &oid) || + tab[-(hexsz + 1)] != ' ') goto bad_line; path_name = ptr; @@ -571,7 +572,7 @@ static void read_index_info(int nul_term_line) * ptr[-1] points at tab, * ptr[-41] is at the beginning of sha1 */ - ptr[-(GIT_SHA1_HEXSZ + 2)] = ptr[-1] = 0; + ptr[-(hexsz + 2)] = ptr[-1] = 0; if (add_cacheinfo(mode, &oid, path_name, stage)) die("git update-index: unable to update %s", path_name); -- cgit v0.10.2-6-g49f6 From fe04ccf7ca124d5ba980090868b173d873104f16 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:01 +0000 Subject: builtin/update-index: simplify parsing of cacheinfo Switch from using get_oid_hex to parse_oid_hex to simplify pointer operations and avoid the need for a hash-related constant. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/builtin/update-index.c b/builtin/update-index.c index 031cef5..3206c5a 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -827,6 +827,7 @@ static int parse_new_style_cacheinfo(const char *arg, { unsigned long ul; char *endp; + const char *p; if (!arg) return -1; @@ -837,9 +838,9 @@ static int parse_new_style_cacheinfo(const char *arg, return -1; /* not a new-style cacheinfo */ *mode = ul; endp++; - if (get_oid_hex(endp, oid) || endp[GIT_SHA1_HEXSZ] != ',') + if (parse_oid_hex(endp, oid, &p) || *p != ',') return -1; - *path = endp + GIT_SHA1_HEXSZ + 1; + *path = p + 1; return 0; } -- cgit v0.10.2-6-g49f6 From 5188eb5d8e80c2f330fbafb021ffa28bac2ef88a Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:02 +0000 Subject: builtin/fmt-merge-msg: make hash independent Convert several uses of GIT_SHA1_HEXSZ into references to the_hash_algo. Switch other uses into a use of parse_oid_hex and uses of its computed pointer. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/builtin/fmt-merge-msg.c b/builtin/fmt-merge-msg.c index bd680be..e8c13a2 100644 --- a/builtin/fmt-merge-msg.c +++ b/builtin/fmt-merge-msg.c @@ -108,14 +108,15 @@ static int handle_line(char *line, struct merge_parents *merge_parents) struct string_list_item *item; int pulling_head = 0; struct object_id oid; + const unsigned hexsz = the_hash_algo->hexsz; - if (len < GIT_SHA1_HEXSZ + 3 || line[GIT_SHA1_HEXSZ] != '\t') + if (len < hexsz + 3 || line[hexsz] != '\t') return 1; - if (starts_with(line + GIT_SHA1_HEXSZ + 1, "not-for-merge")) + if (starts_with(line + hexsz + 1, "not-for-merge")) return 0; - if (line[GIT_SHA1_HEXSZ + 1] != '\t') + if (line[hexsz + 1] != '\t') return 2; i = get_oid_hex(line, &oid); @@ -130,7 +131,7 @@ static int handle_line(char *line, struct merge_parents *merge_parents) if (line[len - 1] == '\n') line[len - 1] = 0; - line += GIT_SHA1_HEXSZ + 2; + line += hexsz + 2; /* * At this point, line points at the beginning of comment e.g. @@ -342,7 +343,7 @@ static void shortlog(const char *name, const struct object_id *oid = &origin_data->oid; int limit = opts->shortlog_len; - branch = deref_tag(parse_object(oid), oid_to_hex(oid), GIT_SHA1_HEXSZ); + branch = deref_tag(parse_object(oid), oid_to_hex(oid), the_hash_algo->hexsz); if (!branch || branch->type != OBJ_COMMIT) return; @@ -545,6 +546,7 @@ static void find_merge_parents(struct merge_parents *result, int len; char *p = in->buf + pos; char *newline = strchr(p, '\n'); + const char *q; struct object_id oid; struct commit *parent; struct object *obj; @@ -552,10 +554,9 @@ static void find_merge_parents(struct merge_parents *result, len = newline ? newline - p : strlen(p); pos += len + !!newline; - if (len < GIT_SHA1_HEXSZ + 3 || - get_oid_hex(p, &oid) || - p[GIT_SHA1_HEXSZ] != '\t' || - p[GIT_SHA1_HEXSZ + 1] != '\t') + if (parse_oid_hex(p, &oid, &q) || + q[0] != '\t' || + q[1] != '\t') continue; /* skip not-for-merge */ /* * Do not use get_merge_parent() here; we do not have -- cgit v0.10.2-6-g49f6 From ab47df2d9a1d07380a02c9be2c57bca1cfbb054e Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:03 +0000 Subject: builtin/merge: switch to use the_hash_algo Switch uses of GIT_SHA1_HEXSZ to use the_hash_algo instead. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/builtin/merge.c b/builtin/merge.c index 4a4c094..916c9f0 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1034,6 +1034,7 @@ static void handle_fetch_head(struct commit_list **remotes, struct strbuf *merge const char *filename; int fd, pos, npos; struct strbuf fetch_head_file = STRBUF_INIT; + const unsigned hexsz = the_hash_algo->hexsz; if (!merge_names) merge_names = &fetch_head_file; @@ -1059,16 +1060,16 @@ static void handle_fetch_head(struct commit_list **remotes, struct strbuf *merge else npos = merge_names->len; - if (npos - pos < GIT_SHA1_HEXSZ + 2 || + if (npos - pos < hexsz + 2 || get_oid_hex(merge_names->buf + pos, &oid)) commit = NULL; /* bad */ - else if (memcmp(merge_names->buf + pos + GIT_SHA1_HEXSZ, "\t\t", 2)) + else if (memcmp(merge_names->buf + pos + hexsz, "\t\t", 2)) continue; /* not-for-merge */ else { - char saved = merge_names->buf[pos + GIT_SHA1_HEXSZ]; - merge_names->buf[pos + GIT_SHA1_HEXSZ] = '\0'; + char saved = merge_names->buf[pos + hexsz]; + merge_names->buf[pos + hexsz] = '\0'; commit = get_merge_parent(merge_names->buf + pos); - merge_names->buf[pos + GIT_SHA1_HEXSZ] = saved; + merge_names->buf[pos + hexsz] = saved; } if (!commit) { if (ptr) -- cgit v0.10.2-6-g49f6 From b7f20f72047f3ec22c7daff61a40f52f85ad0b3a Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:04 +0000 Subject: builtin/merge-recursive: make hash independent Use GIT_MAX_HEXSZ instead of GIT_SHA1_HEXSZ for an allocation so that it is sufficiently large. Switch a comparison to use the_hash_algo to determine the length of a hex object ID. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c index 0dd9021..9b2f707 100644 --- a/builtin/merge-recursive.c +++ b/builtin/merge-recursive.c @@ -9,10 +9,10 @@ static const char builtin_merge_recursive_usage[] = static const char *better_branch_name(const char *branch) { - static char githead_env[8 + GIT_SHA1_HEXSZ + 1]; + static char githead_env[8 + GIT_MAX_HEXSZ + 1]; char *name; - if (strlen(branch) != GIT_SHA1_HEXSZ) + if (strlen(branch) != the_hash_algo->hexsz) return branch; xsnprintf(githead_env, sizeof(githead_env), "GITHEAD_%s", branch); name = getenv(githead_env); -- cgit v0.10.2-6-g49f6 From 02afca1ee4a2d0a5ccc5f81e6d45a6caaef28691 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:05 +0000 Subject: diff: switch GIT_SHA1_HEXSZ to use the_hash_algo Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/diff.c b/diff.c index 639eb64..485ff6c 100644 --- a/diff.c +++ b/diff.c @@ -3832,7 +3832,7 @@ static const char *diff_abbrev_oid(const struct object_id *oid, int abbrev) char *hex = oid_to_hex(oid); if (abbrev < 0) abbrev = FALLBACK_DEFAULT_ABBREV; - if (abbrev > GIT_SHA1_HEXSZ) + if (abbrev > the_hash_algo->hexsz) BUG("oid abbreviation out of range: %d", abbrev); if (abbrev) hex[abbrev] = '\0'; @@ -4947,7 +4947,7 @@ const char *diff_aligned_abbrev(const struct object_id *oid, int len) const char *abbrev; /* Do we want all 40 hex characters? */ - if (len == GIT_SHA1_HEXSZ) + if (len == the_hash_algo->hexsz) return oid_to_hex(oid); /* An abbreviated value is fine, possibly followed by an ellipsis. */ @@ -4977,7 +4977,7 @@ const char *diff_aligned_abbrev(const struct object_id *oid, int len) * the automatic sizing is supposed to give abblen that ensures * uniqueness across all objects (statistically speaking). */ - if (abblen < GIT_SHA1_HEXSZ - 3) { + if (abblen < the_hash_algo->hexsz - 3) { static char hex[GIT_MAX_HEXSZ + 1]; if (len < abblen && abblen <= len + 2) xsnprintf(hex, sizeof(hex), "%s%.*s", abbrev, len+3-abblen, ".."); -- cgit v0.10.2-6-g49f6 From 2ed1960a77234659c1de49a4b9fc541d9e91f007 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:06 +0000 Subject: log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/log-tree.c b/log-tree.c index d3a43e2..9655de8 100644 --- a/log-tree.c +++ b/log-tree.c @@ -545,7 +545,7 @@ void show_log(struct rev_info *opt) struct strbuf msgbuf = STRBUF_INIT; struct log_info *log = opt->loginfo; struct commit *commit = log->commit, *parent = log->parent; - int abbrev_commit = opt->abbrev_commit ? opt->abbrev : GIT_SHA1_HEXSZ; + int abbrev_commit = opt->abbrev_commit ? opt->abbrev : the_hash_algo->hexsz; const char *extra_headers = opt->extra_headers; struct pretty_print_context ctx = {0}; -- cgit v0.10.2-6-g49f6 From 94b5e093f9434ab77dd0ccb5a6dd2cd3a94e7de5 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:07 +0000 Subject: sha1-file: convert constants to uses of the_hash_algo Convert one use of 20 and several uses of GIT_SHA1_HEXSZ into references to the_hash_algo. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/sha1-file.c b/sha1-file.c index de4839e..1f66b95 100644 --- a/sha1-file.c +++ b/sha1-file.c @@ -336,7 +336,7 @@ out: static void fill_sha1_path(struct strbuf *buf, const unsigned char *sha1) { int i; - for (i = 0; i < 20; i++) { + for (i = 0; i < the_hash_algo->rawsz; i++) { static char hex[] = "0123456789abcdef"; unsigned int val = sha1[i]; strbuf_addch(buf, hex[val >> 4]); @@ -1473,7 +1473,7 @@ void *read_object_with_reference(const struct object_id *oid, } ref_length = strlen(ref_type); - if (ref_length + GIT_SHA1_HEXSZ > isize || + if (ref_length + the_hash_algo->hexsz > isize || memcmp(buffer, ref_type, ref_length) || get_oid_hex((char *) buffer + ref_length, &actual_oid)) { free(buffer); @@ -2062,9 +2062,9 @@ int for_each_file_in_obj_subdir(unsigned int subdir_nr, namelen = strlen(de->d_name); strbuf_setlen(path, baselen); strbuf_add(path, de->d_name, namelen); - if (namelen == GIT_SHA1_HEXSZ - 2 && + if (namelen == the_hash_algo->hexsz - 2 && !hex_to_bytes(oid.hash + 1, de->d_name, - GIT_SHA1_RAWSZ - 1)) { + the_hash_algo->rawsz - 1)) { if (obj_cb) { r = obj_cb(&oid, path->buf, data); if (r) -- cgit v0.10.2-6-g49f6 From 580f0980e11b9dcfdaf0f8af12b8cef7c702a7e1 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Mon, 16 Jul 2018 01:28:08 +0000 Subject: pretty: switch hard-coded constants to the_hash_algo Switch several hard-coded constants into expressions based either on GIT_MAX_HEXSZ or the_hash_algo. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/pretty.c b/pretty.c index 703fa6f..b0e653f 100644 --- a/pretty.c +++ b/pretty.c @@ -1575,7 +1575,7 @@ static void pp_header(struct pretty_print_context *pp, } if (starts_with(line, "parent ")) { - if (linelen != 48) + if (linelen != the_hash_algo->hexsz + 8) die("bad parent line in commit"); continue; } @@ -1583,7 +1583,7 @@ static void pp_header(struct pretty_print_context *pp, if (!parents_shown) { unsigned num = commit_list_count(commit->parents); /* with enough slop */ - strbuf_grow(sb, num * 50 + 20); + strbuf_grow(sb, num * (GIT_MAX_HEXSZ + 10) + 20); add_merge_info(pp, sb, commit); parents_shown = 1; } -- cgit v0.10.2-6-g49f6