diff options
author | Junio C Hamano <gitster@pobox.com> | 2016-05-18 13:21:42 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-05-25 14:17:22 -0700 |
commit | 33a006aedf24c41f5d14b3510d598bc46a10b65a (patch) | |
tree | 0217b8a1492d9c490770de22b977a94531279db1 | |
parent | 648544312a27733d81cd8f73d37443b04a1b9126 (diff) | |
download | git-33a006aedf24c41f5d14b3510d598bc46a10b65a.tar.gz |
attr: add counted string version of git_attr()
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>
-rw-r--r-- | attr.c | 8 | ||||
-rw-r--r-- | attr.h | 5 |
2 files changed, 8 insertions, 5 deletions
@@ -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]); @@ -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[]; |