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

[PATCH] attr: add counted string version of git_attr()

From
Junio C Hamano <gitster@pobox.com>
Date
May 18, 2016, 21:03 UTC
Message-ID
<xmqqmvnnqdtd.fsf_-_@gitster.mtv.corp.google.com>
In-Reply-To
<xmqqy477qfr2.fsf@gitster.mtv.corp.google.com>

Often a potential caller has <name, namelen> pair that represents the name it wants to create an attribute out of.

When name[namelen] is not NUL, the caller has to xmemdupz() only to call git_attr().

Add git_attr_counted() that takes such a counted string instead of "const char *name".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 * The same for git_attr()
 attr.c | 8 ++++----
 attr.h | 5 ++++-
 2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/attr.c b/attr.c
index eeb29e6..7f20e21 100644
--- a/attr.c
+++ b/attr.c
@@ -78,7 +78,7 @@ static int invalid_attr_name(const char *name, int namelen)
 	return 0;
 }
 
-static struct git_attr *git_attr_internal(const char *name, int len)
+struct git_attr *git_attr_counted(const char *name, size_t len)
 {
 	unsigned hval = hash_name(name, len);
 	unsigned pos = hval % HASHSIZE;
@@ -109,7 +109,7 @@ static struct git_attr *git_attr_internal(const char *name, int len)
 
 struct git_attr *git_attr(const char *name)
 {
-	return git_attr_internal(name, strlen(name));
+	return git_attr_counted(name, strlen(name));
 }
 
 /* What does a matched pattern decide? */
@@ -199,7 +199,7 @@ static const char *parse_attr(const char *src, int lineno, const char *cp,
 		else {
 			e->setto = xmemdupz(equals + 1, ep - equals - 1);
 		}
-		e->attr = git_attr_internal(cp, len);
+		e->attr = git_attr_counted(cp, len);
 	}
 	return ep + strspn(ep, blank);
 }
@@ -254,7 +254,7 @@ static struct match_attr *parse_attr_line(const char *line, const char *src,
 		      sizeof(struct attr_state) * num_attr +
 		      (is_macro ? 0 : namelen + 1));
 	if (is_macro) {
-		res->u.attr = git_attr_internal(name, namelen);
+		res->u.attr = git_attr_counted(name, namelen);
 		res->u.attr->maybe_macro = 1;
 	} else {
 		char *p = (char *)&(res->state[num_attr]);
diff --git a/attr.h b/attr.h
index 4a4ac76..78d6d5a 100644
--- a/attr.h
+++ b/attr.h
@@ -8,7 +8,10 @@ struct git_attr;
  * Given a string, return the gitattribute object that
  * corresponds to it.
  */
-struct git_attr *git_attr(const char *);
+extern struct git_attr *git_attr(const char *);
+
+/* The same, but with counted string */
+extern struct git_attr *git_attr_counted(const char *, size_t);
 
 /* Internal use */
 extern const char git_attr__true[];
-- 
2.8.2-759-geb611ab
Previous: Junio C HamanoNext: Stefan Beller
Message 12 of 17 in “[PATCHv7 0/5] pathspec magic extension to search for attributes”
  1. Stefan BellerMay 18, 2016
  2. 1/5 string list: improve commentStefan Beller, May 18, 2016
  3. 2/5 Documentation: fix a typoStefan Beller, May 18, 2016
  4. 3/5 pathspec: move long magic parsing out of prefix_pathspecStefan Beller, May 18, 2016
  5. 4/5 pathspec: move prefix check out of the inner loopStefan Beller, May 18, 2016
  6. 5/5 pathspec: allow querying for attributesStefan Beller, May 18, 2016
  7. Stefan BellerMay 18, 2016
  8. Junio C HamanoMay 18, 2016
  9. Junio C HamanoMay 18, 2016
  10. Junio C HamanoMay 18, 2016
  11. attr: add counted string version of git_check_attr()Junio C Hamano, May 18, 2016
  12. attr: add counted string version of git_attr()Junio C Hamano, May 18, 2016
  13. Stefan BellerMay 18, 2016
  14. attr: expose validity check for attribute namesJunio C Hamano, May 18, 2016
  15. Stefan BellerMay 18, 2016
  16. Stefan BellerMay 18, 2016
  17. Junio C HamanoMay 18, 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.