diff --git a/libs/util/quakefs.c b/libs/util/quakefs.c index fb780d228..7b815ac8a 100644 --- a/libs/util/quakefs.c +++ b/libs/util/quakefs.c @@ -1330,8 +1330,8 @@ QFS_StripExtension (const char *in, char *out) if (out != in) strcpy (out, in); - if ((tmp = strrchr (out, '.'))) - *tmp = 0; + tmp = out + (QFS_FileExtension (out) - out); + *tmp = 0; } VISIBLE const char * diff --git a/libs/util/test/test-qfs.c b/libs/util/test/test-qfs.c index 3dc81bd89..794bbb89c 100644 --- a/libs/util/test/test-qfs.c +++ b/libs/util/test/test-qfs.c @@ -7,6 +7,7 @@ #ifdef HAVE_STRINGS_H # include #endif +#include #include "QF/quakefs.h" @@ -46,6 +47,22 @@ struct { }; #define num_ext_tests (sizeof (ext_tests) / sizeof (ext_tests[0])) +struct { + const char *path; + const char *expect; +} strip_tests[] = { + {"foo", "foo"}, + {"foo.a", "foo"}, + {"foo.a.b", "foo.a"}, + {".foo", ".foo"}, + {"bar/foo", "bar/foo"}, + {"bar/foo.a", "bar/foo"}, + {"bar/foo.a.b", "bar/foo.a"}, + {"bar/.foo", "bar/.foo"}, + {"bar.a/foo", "bar.a/foo"}, +}; +#define num_strip_tests (sizeof (strip_tests) / sizeof (strip_tests[0])) + int main (int argc, const char **argv) { @@ -71,5 +88,16 @@ main (int argc, const char **argv) res = 1; } } + + for (i = 0; i < num_strip_tests; i++) { + char *strip = strdup (strip_tests[i].path); + QFS_StripExtension (strip, strip); + if (strcmp (strip, strip_tests[i].expect)) { + fprintf (stderr, "FAIL: (%zd) \"%s\" -> \"%s\", got \"%s\"\n", i, + strip_tests[i].path, strip_tests[i].expect, strip); + res = 1; + } + free (strip); + } return res; }