git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] GSoC Micoproject: Hunt down signed int flags

From
Saurav Sachidanand <sauravsachidanand@gmail.com>
Date
Feb 21, 2016, 11:13 UTC
Message-ID
<1456053189-5221-1-git-send-email-sauravsachidanand@gmail.com>

This is patch is for a suggested micro project for GSoC 2016; namely, that of searching for a field of a struct that is of signed integral type and used as a collection of multiple bits, and converting it to an unsigned type if the MSB isn’t used in any special way.

Two structs, `pattern` defined in attr.c and `exclude` defined in dir.h, have a `flags` field of signed int type. The fields of both structs take on values from the same set of positive integers {1, 4, 8, 16}, enumerated through the marco EXC_FLAG_*. `pattern` is used only in attr.c, and `exclude` is used only in builtin/check-ignore.c and dir.c, and in those files, either, the value of `flags` is checked using the `&` operator (e.g.: flags & EXC_FLAG_NODIR), or the value of `flags` is first set to 0 and then set to any one of {1, 4, 8, 16} using the `|=` operator (e.g.: flags |= EXC_FLAG_NODIR). And, so it does not appear that the MSB of `flags` is used in any special way. Therefore, I thought to change the type of `flags` in the definitions of both structs to `unsigned int`.

Furthermore, `flags` is passed by reference (of `pattern` in attr.c and of `exclude` in dir.c) to the function `parse_exclude_pattern` defined in dir.c, that accepts an `int *` type for `flags`. When make was run, it gave a warning for ‘converting between pointers to integer types of different sign’, so I changed the type of that respective argument to `unsigned int *`.

In the end, running make to build didn’t produce any more warnings, and running make in t/ didn’t produce any breakage that wasn’t ‘#TODO known breakage’.

I also thought it’d be helpful to add the comment /* EXC_FLAG_* */ next to `flags` of `exclude`, just like it exists for `flags` of `pattern`.

Signed-off-by: Saurav Sachidanand <sauravsachidanand@gmail.com>
---
 attr.c | 2 +-
 dir.c  | 4 ++--
 dir.h  | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/attr.c b/attr.c
index 086c08d..874f726 100644
--- a/attr.c
+++ b/attr.c
@@ -124,7 +124,7 @@ struct pattern {
 	const char *pattern;
 	int patternlen;
 	int nowildcardlen;
-	int flags;		/* EXC_FLAG_* */
+	unsigned int flags;		/* EXC_FLAG_* */
 };
 
 /*
diff --git a/dir.c b/dir.c
index f0b6d0a..2d657e1 100644
--- a/dir.c
+++ b/dir.c
@@ -457,7 +457,7 @@ int no_wildcard(const char *string)
 
 void parse_exclude_pattern(const char **pattern,
 			   int *patternlen,
-			   int *flags,
+			   unsigned int *flags,
 			   int *nowildcardlen)
 {
 	const char *p = *pattern;
@@ -498,7 +498,7 @@ void add_exclude(const char *string, const char *base,
 {
 	struct exclude *x;
 	int patternlen;
-	int flags;
+	unsigned int flags;
 	int nowildcardlen;
 
 	parse_exclude_pattern(&string, &patternlen, &flags, &nowildcardlen);
diff --git a/dir.h b/dir.h
index cd46f30..6d205f0 100644
--- a/dir.h
+++ b/dir.h
@@ -27,7 +27,7 @@ struct exclude {
 	int nowildcardlen;
 	const char *base;
 	int baselen;
-	int flags;
+	unsigned int flags;		/* EXC_FLAG_* */
 
 	/*
 	 * Counting starts from 1 for line numbers in ignore files,
@@ -241,7 +241,7 @@ extern struct exclude_list *add_exclude_list(struct dir_struct *dir,
 extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,
 					  struct exclude_list *el, int check_index);
 extern void add_excludes_from_file(struct dir_struct *, const char *fname);
-extern void parse_exclude_pattern(const char **string, int *patternlen, int *flags, int *nowildcardlen);
+extern void parse_exclude_pattern(const char **string, int *patternlen, unsigned int *flags, int *nowildcardlen);
 extern void add_exclude(const char *string, const char *base,
 			int baselen, struct exclude_list *el, int srcpos);
 extern void clear_exclude_list(struct exclude_list *el);
-- 
2.7.1.339.g0233b80
Next: Moritz Neeb
Message 1 of 4 in “GSoC Micoproject: Hunt down signed int flags”
  1. GSoC Micoproject: Hunt down signed int flagsSaurav Sachidanand, Feb 21, 2016
  2. Moritz NeebFeb 21, 2016
  3. Eric SunshineFeb 22, 2016
  4. Duy NguyenFeb 22, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.