about summary refs log tree commit diff
path: root/third_party/git/blame.c
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/blame.c')
-rw-r--r--third_party/git/blame.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/third_party/git/blame.c b/third_party/git/blame.c
index 29770e5c81..36a2e7ef11 100644
--- a/third_party/git/blame.c
+++ b/third_party/git/blame.c
@@ -144,7 +144,7 @@ static void append_merge_parents(struct repository *r,
 
 	while (!strbuf_getwholeline_fd(&line, merge_head, '\n')) {
 		struct object_id oid;
-		if (get_oid_hex(line.buf, &oid))
+		if (line.len < GIT_SHA1_HEXSZ || get_oid_hex(line.buf, &oid))
 			die("unknown line in '%s': %s",
 			    git_path_merge_head(r), line.buf);
 		tail = append_parent(r, tail, &oid);
@@ -417,15 +417,14 @@ static void get_fingerprint(struct fingerprint *result,
 		/* Ignore whitespace pairs */
 		if (hash == 0)
 			continue;
-		hashmap_entry_init(&entry->entry, hash);
+		hashmap_entry_init(entry, hash);
 
-		found_entry = hashmap_get_entry(&result->map, entry,
-						/* member name */ entry, NULL);
+		found_entry = hashmap_get(&result->map, entry, NULL);
 		if (found_entry) {
 			found_entry->count += 1;
 		} else {
 			entry->count = 1;
-			hashmap_add(&result->map, &entry->entry);
+			hashmap_add(&result->map, entry);
 			++entry;
 		}
 	}
@@ -433,7 +432,7 @@ static void get_fingerprint(struct fingerprint *result,
 
 static void free_fingerprint(struct fingerprint *f)
 {
-	hashmap_free(&f->map);
+	hashmap_free(&f->map, 0);
 	free(f->entries);
 }
 
@@ -450,10 +449,10 @@ static int fingerprint_similarity(struct fingerprint *a, struct fingerprint *b)
 	struct hashmap_iter iter;
 	const struct fingerprint_entry *entry_a, *entry_b;
 
-	hashmap_for_each_entry(&b->map, &iter, entry_b,
-				entry /* member name */) {
-		entry_a = hashmap_get_entry(&a->map, entry_b, entry, NULL);
-		if (entry_a) {
+	hashmap_iter_init(&b->map, &iter);
+
+	while ((entry_b = hashmap_iter_next(&iter))) {
+		if ((entry_a = hashmap_get(&a->map, entry_b, NULL))) {
 			intersection += entry_a->count < entry_b->count ?
 					entry_a->count : entry_b->count;
 		}
@@ -471,12 +470,10 @@ static void fingerprint_subtract(struct fingerprint *a, struct fingerprint *b)
 
 	hashmap_iter_init(&b->map, &iter);
 
-	hashmap_for_each_entry(&b->map, &iter, entry_b,
-				entry /* member name */) {
-		entry_a = hashmap_get_entry(&a->map, entry_b, entry, NULL);
-		if (entry_a) {
+	while ((entry_b = hashmap_iter_next(&iter))) {
+		if ((entry_a = hashmap_get(&a->map, entry_b, NULL))) {
 			if (entry_a->count <= entry_b->count)
-				hashmap_remove(&a->map, &entry_b->entry, NULL);
+				hashmap_remove(&a->map, entry_b, NULL);
 			else
 				entry_a->count -= entry_b->count;
 		}