[PATCH 3/6] pathspec: cache string length when initializing pathspec
From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 22:49:39
Subsystem:
the rest · Maintainer:
Linus Torvalds
This field will be used when tree_entry_interesting() is converted to use struct pathspec. Currently it uses pathlens[] in struct diff_options to avoid calculating string over and over again. Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> --- cache.h | 3 +++ dir.c | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/cache.h b/cache.h
index a3029fd..d4d9bc5 100644
--- a/cache.h
+++ b/cache.h@@ -495,6 +495,9 @@ extern int ie_modified(const struct index_state *, struct cache_entry *, struct struct pathspec { const char **raw; /* get_pathspec() result, not freed by free_pathspec() */ int nr; + struct pathspec_item { + int len; + } *items; }; extern int init_pathspec(struct pathspec *, const char **);
diff --git a/dir.c b/dir.c
index 205adc4..646c79f 100644
--- a/dir.c
+++ b/dir.c@@ -1074,6 +1074,7 @@ int remove_path(const char *name) int init_pathspec(struct pathspec *pathspec, const char **paths) { const char **p = paths; + int i; memset(pathspec, 0, sizeof(*pathspec)); if (!p)
@@ -1082,10 +1083,20 @@ int init_pathspec(struct pathspec *pathspec, const char **paths) p++; pathspec->raw = paths; pathspec->nr = p - paths; + if (!pathspec->nr) + return 0; + + pathspec->items = xmalloc(sizeof(struct pathspec_item)*pathspec->nr); + for (i = 0; i < pathspec->nr; i++) { + struct pathspec_item *item = pathspec->items+i; + + item->len = strlen(paths[i]); + } return 0; } void free_pathspec(struct pathspec *pathspec) { - ; /* do nothing */ + free(pathspec->items); + pathspec->items = NULL; }
--
1.7.1.rc1.70.g788ca