Skip to content

Commit dabb506

Browse files
shejialuogitster
authored andcommitted
string-list: enable sign compare warnings check
The only sign compare warning in "string-list" is that we compare the `index` of the `int` type with the `list->nr` of unsigned type. We get index by calling "get_entry_index", which would always return unsigned index. Let's change the return type of "get_entry_index" to be "size_t" by slightly modifying the binary search algorithm. Instead of letting "left" to be "-1" initially, assign 0 to it. Then, we could delete "#define DISABLE_SIGN_COMPARE_WARNING" to enable sign warnings check for "string-list" Signed-off-by: shejialuo <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4d2bce7 commit dabb506

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

string-list.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#define DISABLE_SIGN_COMPARE_WARNINGS
2-
31
#include "git-compat-util.h"
42
#include "string-list.h"
53

@@ -17,19 +15,19 @@ void string_list_init_dup(struct string_list *list)
1715

1816
/* if there is no exact match, point to the index where the entry could be
1917
* inserted */
20-
static int get_entry_index(const struct string_list *list, const char *string,
21-
int *exact_match)
18+
static size_t get_entry_index(const struct string_list *list, const char *string,
19+
int *exact_match)
2220
{
23-
int left = -1, right = list->nr;
21+
size_t left = 0, right = list->nr;
2422
compare_strings_fn cmp = list->cmp ? list->cmp : strcmp;
2523

26-
while (left + 1 < right) {
27-
int middle = left + (right - left) / 2;
24+
while (left < right) {
25+
size_t middle = left + (right - left) / 2;
2826
int compare = cmp(string, list->items[middle].string);
2927
if (compare < 0)
3028
right = middle;
3129
else if (compare > 0)
32-
left = middle;
30+
left = middle + 1;
3331
else {
3432
*exact_match = 1;
3533
return middle;
@@ -40,10 +38,10 @@ static int get_entry_index(const struct string_list *list, const char *string,
4038
return right;
4139
}
4240

43-
static int add_entry(struct string_list *list, const char *string)
41+
static size_t add_entry(struct string_list *list, const char *string)
4442
{
4543
int exact_match = 0;
46-
int index = get_entry_index(list, string, &exact_match);
44+
size_t index = get_entry_index(list, string, &exact_match);
4745

4846
if (exact_match)
4947
return index;
@@ -62,7 +60,7 @@ static int add_entry(struct string_list *list, const char *string)
6260

6361
struct string_list_item *string_list_insert(struct string_list *list, const char *string)
6462
{
65-
int index = add_entry(list, string);
63+
size_t index = add_entry(list, string);
6664

6765
return list->items + index;
6866
}

0 commit comments

Comments
 (0)