summaryrefslogtreecommitdiff
path: root/lib/basename.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/basename.c')
-rw-r--r--lib/basename.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/basename.c b/lib/basename.c
new file mode 100644
index 000000000..06f859483
--- /dev/null
+++ b/lib/basename.c
@@ -0,0 +1,35 @@
+/*
+ * get base name
+ *
+ * (adopted from sh-utils)
+ */
+
+#include "config.h"
+
+#define FILESYSTEM_PREFIX_LEN(filename) 0
+#define ISSLASH(C) ((C) == '/')
+
+char *_xine_private_basename(char *name) {
+ char const *base = name + FILESYSTEM_PREFIX_LEN (name);
+ char const *p;
+
+ for (p = base; *p; p++) {
+ if (ISSLASH (*p)) {
+ /* Treat multiple adjacent slashes like a single slash. */
+ do p++;
+ while (ISSLASH (*p));
+
+ /* If the file name ends in slash, use the trailing slash as
+ the basename if no non-slashes have been found. */
+ if (! *p) {
+ if (ISSLASH (*base)) base = p - 1;
+ break;
+ }
+
+ /* *P is a non-slash preceded by a slash. */
+ base = p;
+ }
+ }
+
+ return (char *)base;
+}