]> git.ipfire.org Git - thirdparty/git.git/commit
string-list: enable sign compare warnings check
authorshejialuo <shejialuo@gmail.com>
Sun, 29 Jun 2025 04:28:06 +0000 (12:28 +0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 7 Jul 2025 15:07:46 +0000 (08:07 -0700)
commit67cfd2924d099b3316ddf579ba7c11fdc29ad2b6
tree237214c74e41cadbafa72f3d58c1be9059ff73e2
parent885becd9c4aec6c3764b4c701baf41853b49899e
string-list: enable sign compare warnings check

In "add_entry", we call "get_entry_index" function to get the inserted
position. However, as the return type of "get_entry_index" function is
`int`, there is a sign compare warning when comparing the `index` with
the `list-nr` of unsigned type.

"get_entry_index" would always return unsigned index. However, the
current binary search algorithm initializes "left" to be "-1", which
necessitates the use of signed `int` return type.

The reason why we need to assign "left" to be "-1" is that in the
`while` loop, we increment "left" by 1 to determine whether the loop
should end. This design choice, while functional, forces us to use
signed arithmetic throughout the function.

To resolve this sign comparison issue, let's modify the binary search
algorithm with the following approach:

1. Initialize "left" to 0 instead of -1
2. Use `left < right` as the loop termination condition instead of
   `left + 1 < right`
3. When searching the right part, set `left = middle + 1` instead of
   `middle`

Then, we could delete "#define DISABLE_SIGN_COMPARE_WARNING" to enable
sign warnings check for "string-list".

Signed-off-by: shejialuo <shejialuo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
string-list.c