aboutsummaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-06-09 11:27:47 -0700
committerJunio C Hamano <gitster@pobox.com>2014-06-09 11:27:47 -0700
commit53b4d8387bb75a9b84ef67a72dc4e1587dbb6192 (patch)
treeb12ee533083496a82da61c3ad61bed8373190cc9 /dir.c
parent0908b6dfc307b68822a00b9263293dd516d609d3 (diff)
parente61a6c1d8272f9d7bdc861ed28bfac5fb7e33556 (diff)
downloadgit-53b4d8387bb75a9b84ef67a72dc4e1587dbb6192.tar.xz
Merge branch 'pb/trim-trailing-spaces'
Fix an error in parsing of .gitignore files that use a trailing "\ " to mark pathnames that end with a SP. * pb/trim-trailing-spaces: dir.c:trim_trailing_spaces(): fix for " \ " sequence
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/dir.c b/dir.c
index eb6f581270..797805d6a1 100644
--- a/dir.c
+++ b/dir.c
@@ -508,21 +508,25 @@ void clear_exclude_list(struct exclude_list *el)
static void trim_trailing_spaces(char *buf)
{
- int i, last_space = -1, nr_spaces, len = strlen(buf);
- for (i = 0; i < len; i++)
- if (buf[i] == '\\')
- i++;
- else if (buf[i] == ' ') {
- if (last_space == -1) {
- last_space = i;
- nr_spaces = 1;
- } else
- nr_spaces++;
- } else
- last_space = -1;
+ char *p, *last_space = NULL;
+
+ for (p = buf; *p; p++)
+ switch (*p) {
+ case ' ':
+ if (!last_space)
+ last_space = p;
+ break;
+ case '\\':
+ p++;
+ if (!*p)
+ return;
+ /* fallthrough */
+ default:
+ last_space = NULL;
+ }
- if (last_space != -1 && last_space + nr_spaces == len)
- buf[last_space] = '\0';
+ if (last_space)
+ *last_space = '\0';
}
int add_excludes_from_file_to_list(const char *fname,