{"thread":{"id":"41583","subject":"[PATCH] Store EXC_FLAG_* values in unsigned integers","startedAt":"2016-03-01T17:02:59Z","lastAt":"2016-03-01T18:26:12Z","messageCount":2,"participants":["Saurav Sachidanand","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"279977","messageId":"1456851779-38548-1-git-send-email-sauravsachidanand@gmail.com","threadId":"41583","inReplyTo":null,"subject":"[PATCH] Store EXC_FLAG_* values in unsigned integers","fromName":"Saurav Sachidanand","fromEmail":"sauravsachidanand@gmail.com","sentAt":"2016-03-01T17:02:59Z","receivedAt":"2016-03-01T17:02:59Z","isPatch":true,"sender":{"key":"sauravsachidanand@gmail.com","avatar":"https://avatars.githubusercontent.com/u/12742708?v=4"},"body":"The values defined by the macro EXC_FLAG_* (1, 4, 8, 16) are\nstored in fields of the structs \"pattern\" and “exclude”, some\nfunctions arguments and a local variable.\n\nNo variable that holds these values uses its most significant\nbit in any special way, as it’s value is either checked for a\nvariant of EXC_FLAG_* using the & operator\n(flags & EXC_FLAG_NODIR), or assigned a value of 0 first\nand then any one of {1, 4, 8, 16} using the | operator\n(flags |= EXC_FLAG_NODIR). Hence, change the types of such\nvariables and fields to unsigned.\n\nAnd while we’re at it, document \"flags\" of \"exclude\" to explicitly\nstate the values it’s supposed to take on.\n\nSigned-off-by: Saurav Sachidanand <sauravsachidanand@gmail.com>\n---\n\nThis is a patch for the suggested microproject for GSoC 2016, titled\n\"Use unsigned integral type for collection of bits.\" It’s the fourth\niteration of this patch that incorporates changes to the commit\nmessage suggested by Moritz Neeb, Eric Sunshine and Junio C Hamano,\nand to some function signatures suggested by Duy Nguyen. Thanks to\nthem for their feedback.\n\nPrevious versions of this patch:\n1) http://thread.gmane.org/gmane.comp.version-control.git/286821\n2) http://thread.gmane.org/gmane.comp.version-control.git/287387\n3) http://thread.gmane.org/gmane.comp.version-control.git/287838\n\n attr.c | 2 +-\n dir.c  | 8 ++++----\n dir.h  | 8 ++++----\n 3 files changed, 9 insertions(+), 9 deletions(-)\n\ndiff --git a/attr.c b/attr.c\nindex 086c08d..679e13c 100644\n--- a/attr.c\n+++ b/attr.c\n@@ -124,7 +124,7 @@ struct pattern {\n \tconst char *pattern;\n \tint patternlen;\n \tint nowildcardlen;\n-\tint flags;\t\t/* EXC_FLAG_* */\n+\tunsigned flags;\t\t/* EXC_FLAG_* */\n };\n\n /*\ndiff --git a/dir.c b/dir.c\nindex 552af23..82cec7d 100644\n--- a/dir.c\n+++ b/dir.c\n@@ -459,7 +459,7 @@ int no_wildcard(const char *string)\n\n void parse_exclude_pattern(const char **pattern,\n \t\t\t   int *patternlen,\n-\t\t\t   int *flags,\n+\t\t\t   unsigned *flags,\n \t\t\t   int *nowildcardlen)\n {\n \tconst char *p = *pattern;\n@@ -500,7 +500,7 @@ void add_exclude(const char *string, const char *base,\n {\n \tstruct exclude *x;\n \tint patternlen;\n-\tint flags;\n+\tunsigned flags;\n \tint nowildcardlen;\n\n \tparse_exclude_pattern(&string, &patternlen, &flags, &nowildcardlen);\n@@ -811,7 +811,7 @@ void add_excludes_from_file(struct dir_struct *dir, const char *fname)\n\n int match_basename(const char *basename, int basenamelen,\n \t\t   const char *pattern, int prefix, int patternlen,\n-\t\t   int flags)\n+\t\t   unsigned flags)\n {\n \tif (prefix == patternlen) {\n \t\tif (patternlen == basenamelen &&\n@@ -836,7 +836,7 @@ int match_basename(const char *basename, int basenamelen,\n int match_pathname(const char *pathname, int pathlen,\n \t\t   const char *base, int baselen,\n \t\t   const char *pattern, int prefix, int patternlen,\n-\t\t   int flags)\n+\t\t   unsigned flags)\n {\n \tconst char *name;\n \tint namelen;\ndiff --git a/dir.h b/dir.h\nindex 3ec3fb0..e942b50 100644\n--- a/dir.h\n+++ b/dir.h\n@@ -28,7 +28,7 @@ struct exclude {\n \tint nowildcardlen;\n \tconst char *base;\n \tint baselen;\n-\tint flags;\n+\tunsigned flags;\t\t/* EXC_FLAG_* */\n\n \t/*\n \t * Counting starts from 1 for line numbers in ignore files,\n@@ -229,10 +229,10 @@ struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname,\n  * attr.c:path_matches()\n  */\n extern int match_basename(const char *, int,\n-\t\t\t  const char *, int, int, int);\n+\t\t\t  const char *, int, int, unsigned);\n extern int match_pathname(const char *, int,\n \t\t\t  const char *, int,\n-\t\t\t  const char *, int, int, int);\n+\t\t\t  const char *, int, int, unsigned);\n\n extern struct exclude *last_exclude_matching(struct dir_struct *dir,\n \t\t\t\t\t     const char *name, int *dtype);\n@@ -244,7 +244,7 @@ extern struct exclude_list *add_exclude_list(struct dir_struct *dir,\n extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,\n \t\t\t\t\t  struct exclude_list *el, int check_index);\n extern void add_excludes_from_file(struct dir_struct *, const char *fname);\n-extern void parse_exclude_pattern(const char **string, int *patternlen, int *flags, int *nowildcardlen);\n+extern void parse_exclude_pattern(const char **string, int *patternlen, unsigned *flags, int *nowildcardlen);\n extern void add_exclude(const char *string, const char *base,\n \t\t\tint baselen, struct exclude_list *el, int srcpos);\n extern void clear_exclude_list(struct exclude_list *el);\n--\n2.7.1.339.g0233b80\n"},{"id":"279991","messageId":"xmqqr3fu6omz.fsf@gitster.mtv.corp.google.com","threadId":"41583","inReplyTo":"1456851779-38548-1-git-send-email-sauravsachidanand@gmail.com","subject":"Re: [PATCH] Store EXC_FLAG_* values in unsigned integers","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-03-01T18:26:12Z","receivedAt":"2016-03-01T18:26:12Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Saurav Sachidanand <sauravsachidanand@gmail.com> writes:\n\n> The values defined by the macro EXC_FLAG_* (1, 4, 8, 16) are\n> stored in fields of the structs \"pattern\" and “exclude”, some\n> functions arguments and a local variable.\n\nIt's a minor point, but it is somewhat irritating that \"pattern\" is\nenclosed in a regular dq pair while \"exclude\" is in a fancy dq pair.\nI think our log messages tend to prefer the regular ones.\n\nNo need to resend; thanks.\n"}]}