diff options
author | Brandon Casey <drafnel@gmail.com> | 2010-09-27 06:49:13 +0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-09-27 22:41:25 +0400 |
commit | b822423ed20df158a478c9522373bffb04fa5ecc (patch) | |
tree | c86f2aecb2520a4ec4147829ad4ebe919f8b265e | |
parent | d212cef936d689d2a3b0932e678fce255362c72a (diff) |
wt-status.c: don't leak directory entries when processing untracked,ignored
When iterating through the list of directory entries, searching for
untracked entries, only the entries added to the string_list were free'd.
The rest (tracked or not matching the pathspec) were leaked.
Ditto for the "ignored" loop.
Rearrange the loops so that all entries are free'd.
Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | wt-status.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/wt-status.c b/wt-status.c index 54b6b03b9c..fc2438f60b 100644 --- a/wt-status.c +++ b/wt-status.c @@ -390,11 +390,9 @@ static void wt_status_collect_untracked(struct wt_status *s) fill_directory(&dir, s->pathspec); for (i = 0; i < dir.nr; i++) { struct dir_entry *ent = dir.entries[i]; - if (!cache_name_is_other(ent->name, ent->len)) - continue; - if (!match_pathspec(s->pathspec, ent->name, ent->len, 0, NULL)) - continue; - string_list_insert(&s->untracked, ent->name); + if (cache_name_is_other(ent->name, ent->len) && + match_pathspec(s->pathspec, ent->name, ent->len, 0, NULL)) + string_list_insert(&s->untracked, ent->name); free(ent); } @@ -404,11 +402,9 @@ static void wt_status_collect_untracked(struct wt_status *s) fill_directory(&dir, s->pathspec); for (i = 0; i < dir.nr; i++) { struct dir_entry *ent = dir.entries[i]; - if (!cache_name_is_other(ent->name, ent->len)) - continue; - if (!match_pathspec(s->pathspec, ent->name, ent->len, 0, NULL)) - continue; - string_list_insert(&s->ignored, ent->name); + if (cache_name_is_other(ent->name, ent->len) && + match_pathspec(s->pathspec, ent->name, ent->len, 0, NULL)) + string_list_insert(&s->ignored, ent->name); free(ent); } } |