summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2010-02-19 05:57:21 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-02-19 06:22:22 (GMT)
commit3fc0d131c573f6f774e2e4abba9cbda694b08321 (patch)
treef15d2c7a0f6b868656dec035b3db98d54d0be6b4 /dir.c
parentf01f1099f40f24fe6f7802185340a6fa3a3d4f35 (diff)
downloadgit-3fc0d131c573f6f774e2e4abba9cbda694b08321.zip
git-3fc0d131c573f6f774e2e4abba9cbda694b08321.tar.gz
git-3fc0d131c573f6f774e2e4abba9cbda694b08321.tar.bz2
rm: fix bug in recursive subdirectory removal
If we remove a path in a/deep/subdirectory, we should try to remove as many trailing components as possible (i.e., subdirectory, then deep, then a). However, the test for the return value of rmdir was reversed, so we only ever deleted at most one level. The fix is in remove_path, so "apply" and "merge-recursive" also are fixed. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/dir.c b/dir.c
index 6aae09a..fdc0a2e 100644
--- a/dir.c
+++ b/dir.c
@@ -864,7 +864,7 @@ int remove_path(const char *name)
slash = dirs + (slash - name);
do {
*slash = '\0';
- } while (rmdir(dirs) && (slash = strrchr(dirs, '/')));
+ } while (rmdir(dirs) == 0 && (slash = strrchr(dirs, '/')));
free(dirs);
}
return 0;