From 15c2538532c3f4073b8daa368d6fa1e0f43d871d Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 17 Oct 2013 00:44:57 +0200 Subject: ArchiveLookup: move code to FindSlash() --- src/ArchiveLookup.cxx | 25 ++++++++++++++++++------- 1 file 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 @@ -29,6 +29,17 @@ #include #include +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; -- cgit v1.2.3