X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=dir.c;h=11fab7f4bf9b93be33795dfd5c1a3c55c8a8079d;hb=f95c6780c244e90abf87222126ad3b4bb18a504e;hp=6564a929ff66cdffca0666e175c9361149b25b5e;hpb=42c4b58059fa9af65e90f2c418bb551e30d1d32f;p=git.git diff --git a/dir.c b/dir.c index 6564a929f..11fab7f4b 100644 --- a/dir.c +++ b/dir.c @@ -34,8 +34,9 @@ int common_prefix(const char **pathspec) prefix = slash - path + 1; while ((next = *++pathspec) != NULL) { int len = strlen(next); - if (len >= prefix && !memcmp(path, next, len)) + if (len >= prefix && !memcmp(path, next, prefix)) continue; + len = prefix - 1; for (;;) { if (!len) return 0; @@ -447,6 +448,7 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co while ((de = readdir(fdir)) != NULL) { int len; + int exclude; if ((de->d_name[0] == '.') && (de->d_name[1] == 0 || @@ -460,7 +462,9 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co memcpy(fullname + baselen, de->d_name, len+1); if (simplify_away(fullname, baselen + len, simplify)) continue; - if (excluded(dir, fullname) != dir->show_ignored) { + + exclude = excluded(dir, fullname); + if (exclude != dir->show_ignored) { if (!dir->show_ignored || DTYPE(de) != DT_DIR) { continue; } @@ -483,6 +487,8 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co len++; switch (treat_directory(dir, fullname, baselen + len, simplify)) { case show_directory: + if (exclude != dir->show_ignored) + continue; break; case recurse_into_directory: contents += read_directory_recursive(dir,