As "string_list_find_insert_index" is a simple wrapper of "get_entry_index", we could simply change its return type to "size_t". Update all callers to use size_t variables for storing the return value. The tricky fix is the loop condition in "mailmap.c" to properly handle "size_t" underflow by changing from `0 <= --i` to `i-- > 0`. Remove "DISABLE_SIGN_COMPARE_WARNINGS" from "mailmap.c" as it's no longer needed with the proper unsigned types. Signed-off-by: shejialuo <shejialuo@xxxxxxxxx> --- add-interactive.c | 2 +- mailmap.c | 5 ++--- refs.c | 4 +--- string-list.c | 4 ++-- string-list.h | 4 ++-- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/add-interactive.c b/add-interactive.c index 9a42b3b38b..2005f56b69 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -222,7 +222,7 @@ static void find_unique_prefixes(struct prefix_item_list *list) static ssize_t find_unique(const char *string, struct prefix_item_list *list) { int exact_match; - int index = string_list_find_insert_index(&list->sorted, string, &exact_match); + size_t index = string_list_find_insert_index(&list->sorted, string, &exact_match); struct string_list_item *item; if (list->items.nr != list->sorted.nr) diff --git a/mailmap.c b/mailmap.c index 253517cdf6..0168342650 100644 --- a/mailmap.c +++ b/mailmap.c @@ -1,5 +1,4 @@ #define USE_THE_REPOSITORY_VARIABLE -#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" @@ -244,7 +243,7 @@ static struct string_list_item *lookup_prefix(struct string_list *map, const char *string, size_t len) { int exact_match; - int i = string_list_find_insert_index(map, string, &exact_match); + size_t i = string_list_find_insert_index(map, string, &exact_match); if (exact_match) { if (!string[len]) return &map->items[i]; @@ -266,7 +265,7 @@ static struct string_list_item *lookup_prefix(struct string_list *map, * overlong key would be inserted, which must come after the * real location of the key if one exists. */ - while (0 <= --i && i < map->nr) { + while (i-- > 0 && i < map->nr) { int cmp = strncasecmp(map->items[i].string, string, len); if (cmp < 0) /* diff --git a/refs.c b/refs.c index f1ff5bf846..a8f06b9a0a 100644 --- a/refs.c +++ b/refs.c @@ -1688,8 +1688,6 @@ const char *find_descendant_ref(const char *dirname, const struct string_list *extras, const struct string_list *skip) { - int pos; - if (!extras) return NULL; @@ -1699,7 +1697,7 @@ const char *find_descendant_ref(const char *dirname, * with dirname (remember, dirname includes the trailing * slash) and is not in skip, then we have a conflict. */ - for (pos = string_list_find_insert_index(extras, dirname, NULL); + for (size_t pos = string_list_find_insert_index(extras, dirname, NULL); pos < extras->nr; pos++) { const char *extra_refname = extras->items[pos].string; diff --git a/string-list.c b/string-list.c index 224bc182ff..e69923cd88 100644 --- a/string-list.c +++ b/string-list.c @@ -91,8 +91,8 @@ int string_list_has_string(const struct string_list *list, const char *string) return exact_match; } -int string_list_find_insert_index(const struct string_list *list, const char *string, - int *exact_match) +size_t string_list_find_insert_index(const struct string_list *list, const char *string, + int *exact_match) { return get_entry_index(list, string, exact_match); } diff --git a/string-list.h b/string-list.h index 03c7009472..f6be2bd5c7 100644 --- a/string-list.h +++ b/string-list.h @@ -173,8 +173,8 @@ void string_list_remove_empty_items(struct string_list *list, int free_util); /** Determine if the string_list has a given string or not. */ int string_list_has_string(const struct string_list *list, const char *string); -int string_list_find_insert_index(const struct string_list *list, const char *string, - int *exact_match); +size_t string_list_find_insert_index(const struct string_list *list, const char *string, + int *exact_match); /** * Insert a new element to the string_list. The returned pointer can -- 2.51.0