@@ -129,3 +129,7 @@ LIBMPATHUTIL_2.0 {
vector_move_up;
vector_sort;
};
+
+LIBMPATHUTIL_2.1 {
+ libmp_basename;
+};
@@ -32,18 +32,15 @@ strchop(char *str)
return i;
}
-#ifndef __GLIBC__
/*
* glibc's non-destructive version of basename()
* License: LGPL-2.1-or-later
*/
-static const char *__basename(const char *filename)
+const char *libmp_basename(const char *filename)
{
char *p = strrchr(filename, '/');
return p ? p + 1 : filename;
}
-#define basename(x) __basename(x)
-#endif
int
basenamecpy (const char *src, char *dst, size_t size)
@@ -12,6 +12,11 @@
#include <stdio.h>
size_t strchop(char *);
+
+const char *libmp_basename(const char *filename);
+#ifndef __GLIBC__
+#define basename(x) libmp_basename(x)
+#endif
int basenamecpy (const char *src, char *dst, size_t size);
int filepresent (const char *run);
char *get_next_string(char **temp, const char *split_char);
@@ -16,6 +16,7 @@
*
*/
+#define _GNU_SOURCE
#include <stdbool.h>
#include <stdarg.h>
#include <stddef.h>
@@ -23,6 +24,7 @@
#include <stdlib.h>
#include <cmocka.h>
#include <endian.h>
+#include <string.h>
#include "util.h"
#include "globals.c"
@@ -163,6 +165,34 @@ static int test_basenamecpy(void)
return cmocka_run_group_tests(tests, NULL, NULL);
}
+static void test_basename_01(void **state)
+{
+ const char *path = "/foo/bar";
+ const char *base;
+
+ base = basename(path);
+ assert_string_equal(base, "bar");
+ assert_string_equal(path, "/foo/bar");
+}
+
+static void test_basename_02(void **state)
+{
+ const char *path = "/foo/bar/";
+ const char *base;
+
+ base = basename(path);
+ assert_string_equal(base, "");
+ assert_string_equal(path, "/foo/bar/");
+}
+
+static int test_basename(void) {
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(test_basename_01),
+ cmocka_unit_test(test_basename_02),
+ };
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
+
/*
* On big endian systems, if bitfield_t is 32bit, we need
* to swap the two 32 bit parts of a 64bit value to make
@@ -946,6 +976,7 @@ int main(void)
init_test_verbosity(-1);
ret += test_basenamecpy();
+ ret += test_basename();
ret += test_bitmasks();
ret += test_strlcpy();
ret += test_strlcat();