diff options
-rw-r--r-- | src/ArchiveLookup.cxx | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/ArchiveLookup.cxx b/src/ArchiveLookup.cxx index 7cea655fd..ea7449486 100644 --- a/src/ArchiveLookup.cxx +++ b/src/ArchiveLookup.cxx @@ -29,6 +29,18 @@ #include <unistd.h> #include <errno.h> +gcc_pure +static const char * +FindSuffix(const char *p, size_t i) +{ + for (; i > 0; --i) { + if (p[i] == '.') + return p + i + 1; + } + + return nullptr; +} + bool archive_lookup(char *pathname, const char **archive, const char **inpath, const char **suffix) @@ -67,14 +79,7 @@ archive_lookup(char *pathname, const char **archive, *inpath = pathname + idx+1; //try to get suffix - *suffix = NULL; - while (idx > 0) { - if (pathname[idx] == '.') { - *suffix = pathname + idx + 1; - break; - } - idx--; - } + *suffix = FindSuffix(pathname, idx); break; } else { FormatError(archive_domain, |