summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/color.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/color.c b/src/color.c
index d1b36f9..a701813 100644
--- a/src/color.c
+++ b/src/color.c
@@ -998,22 +998,25 @@ static ssize_t first_broken_offset(const char *path, const struct BFTW *ftwbuf,
goto out;
}
+ size_t len = dstrlen(at_path);
while (ret > 0) {
+ dstresize(&at_path, len);
if (xfaccessat(at_fd, at_path, F_OK) == 0) {
break;
}
- size_t len = dstrlen(at_path);
- while (ret && at_path[len - 1] == '/') {
- --len, --ret;
- }
- if (errno != ENOTDIR) {
- while (ret && at_path[len - 1] != '/') {
+ // Try without trailing slashes, to distinguish "notdir/" from "notdir"
+ if (at_path[len - 1] == '/') {
+ do {
--len, --ret;
- }
+ } while (ret > 0 && at_path[len - 1] == '/');
+ continue;
}
- dstresize(&at_path, len);
+ // Remove the last component and try again
+ do {
+ --len, --ret;
+ } while (ret > 0 && at_path[len - 1] != '/');
}
out_path: