aboutsummaryrefslogtreecommitdiffstats
path: root/src/ArchiveLookup.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/ArchiveLookup.cxx')
-rw-r--r--src/ArchiveLookup.cxx25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/ArchiveLookup.cxx b/src/ArchiveLookup.cxx
index ea7449486..4df7eaca1 100644
--- a/src/ArchiveLookup.cxx
+++ b/src/ArchiveLookup.cxx
@@ -30,6 +30,17 @@
#include <errno.h>
gcc_pure
+static char *
+FindSlash(char *p, size_t i)
+{
+ for (; i > 0; --i)
+ if (p[i] == '/')
+ return p + i;
+
+ return nullptr;
+}
+
+gcc_pure
static const char *
FindSuffix(const char *p, size_t i)
{
@@ -88,14 +99,14 @@ archive_lookup(char *pathname, const char **archive,
break;
}
}
+
//find one dir up
- while (idx > 0) {
- if (pathdupe[idx] == '/') {
- pathdupe[idx] = 0;
- break;
- }
- idx--;
- }
+ char *slash = FindSlash(pathdupe, idx);
+ if (slash == nullptr)
+ break;
+
+ *slash = 0;
+ idx = slash - pathdupe;
}
g_free(pathdupe);
return ret;