OSDN Git Service

dir: avoid allocation in fill_directory()
authorRené Scharfe <l.s.r@web.de>
Tue, 7 Feb 2017 22:04:25 +0000 (23:04 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 8 Feb 2017 21:38:41 +0000 (13:38 -0800)
Pass the match member of the first pathspec item directly to
read_directory() instead of using common_prefix() to duplicate it first,
thus avoiding memory duplication, strlen(3) and free(3).

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c

diff --git a/dir.c b/dir.c
index 65c3e68..4541f9e 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -174,20 +174,19 @@ char *common_prefix(const struct pathspec *pathspec)
 
 int fill_directory(struct dir_struct *dir, const struct pathspec *pathspec)
 {
-       char *prefix;
+       const char *prefix;
        size_t prefix_len;
 
        /*
         * Calculate common prefix for the pathspec, and
         * use that to optimize the directory walk
         */
-       prefix = common_prefix(pathspec);
-       prefix_len = prefix ? strlen(prefix) : 0;
+       prefix_len = common_prefix_len(pathspec);
+       prefix = prefix_len ? pathspec->items[0].match : "";
 
        /* Read the directory and prune it */
        read_directory(dir, prefix, prefix_len, pathspec);
 
-       free(prefix);
        return prefix_len;
 }