As part of my microproject : Use unsigned integral type for collection of bits: Pick one field of a structure that (1) is of signed integral type and (2) is used as a collection of multiple bits. Discuss if there is a good reason why it has to be a signed integral field and change it to an unsigned type otherwise. More ref: https://public-inbox.org/git/xmqqsiebrlez.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxx http://stackoverflow.com/questions/29795170/usage-of-signed-vs-unsigned-variables-for-flags-in-c I have found several structures where a signed int was used on flags for bitwise & to check various cases. diff --git a/bisect.h b/bisect.h index a979a7f..4b562a8 100644 --- a/bisect.h +++ b/bisect.h @@ -16,6 +16,8 @@ extern struct commit_list *filter_skipped(struct commit_list *list, struct rev_list_info { struct rev_info *revs; + + // int flags changed to unsigned int unsigned int flags; int show_timestamp; int hdr_termination; diff --git a/builtin/add.c b/builtin/add.c index 9f53f02..1212eea 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -26,6 +26,8 @@ static int patch_interactive, add_interactive, edit_interactive; static int take_worktree_changes; struct update_callback_data { + + // flags supposed to be unsigned int flags; int add_errors; }; diff --git a/parse-options.h b/parse-options.h index dcd8a09..ad180c9 100644 --- a/parse-options.h +++ b/parse-options.h @@ -107,7 +107,9 @@ struct option { const char *argh; const char *help; - int flags; + // int flags changed to unsigned + + unsigned int flags; parse_opt_cb *callback; intptr_t defval; }; @@ -201,7 +203,10 @@ struct parse_opt_ctx_t { const char **out; int argc, cpidx, total; const char *opt; - int flags; + + // int flags changed to unsigned + + unsigned int flags; const char *prefix; }; ------- result : the changes were made in bisect.h , parse-options.h and builtin/add.c I have not yet tested these changes.