From: Nguyễn Thái Ngọc Duy Date: Thu, 04 Oct 2012 07:39:48 GMT Subject: [PATCH 2/6] attr: avoid strlen() on every match Message-ID: <1349336392-1772-3-git-send-email-pclouds@gmail.com> In-Reply-To: <1349336392-1772-1-git-send-email-pclouds@gmail.com> Signed-off-by: Nguyễn Thái Ngọc Duy --- attr.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/attr.c b/attr.c index 48df800..66b96d9 100644 --- a/attr.c +++ b/attr.c @@ -277,6 +277,7 @@ static struct match_attr *parse_attr_line(const char *line, const char *src, static struct attr_stack { struct attr_stack *prev; char *origin; + size_t originlen; unsigned num_matches; unsigned alloc; struct match_attr **attrs; @@ -532,6 +533,7 @@ static void bootstrap_attr_stack(void) if (!is_bare_repository() || direction == GIT_ATTR_INDEX) { elem = read_attr(GITATTRIBUTES_FILE, 1); elem->origin = xstrdup(""); + elem->originlen = 0; elem->prev = attr_stack; attr_stack = elem; debug_push(elem); @@ -625,7 +627,7 @@ static void prepare_attr_stack(const char *path) strbuf_addstr(&pathbuf, GITATTRIBUTES_FILE); elem = read_attr(pathbuf.buf, 0); strbuf_setlen(&pathbuf, cp - path); - elem->origin = strbuf_detach(&pathbuf, NULL); + elem->origin = strbuf_detach(&pathbuf, &elem->originlen); elem->prev = attr_stack; attr_stack = elem; debug_push(elem); @@ -701,7 +703,7 @@ static int fill(const char *path, int pathlen, struct attr_stack *stk, int rem) if (a->is_macro) continue; if (path_matches(path, pathlen, - a->pattern, base, strlen(base))) + a->pattern, base, stk->originlen)) rem = fill_one("fill", a, rem); } return rem; -- 1.7.12.1.405.gb727dc9