*
* Copyright (C) 2001 Manuel Novoa III <mjn3@codepoet.org>
*
- * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+#include "libbb.h"
-char *bb_get_last_path_component(char *path)
+const char* FAST_FUNC bb_basename(const char *name)
{
- char *first = path;
- char *last;
+ const char *cp = strrchr(name, '/');
+ if (cp)
+ return cp + 1;
+ return name;
+}
+
+/*
+ * "/" -> "/"
+ * "abc" -> "abc"
+ * "abc/def" -> "def"
+ * "abc/def/" -> ""
+ */
+char* FAST_FUNC bb_get_last_path_component_nostrip(const char *path)
+{
+ char *slash = strrchr(path, '/');
- last = path - 1;
+ if (!slash || (slash == path && !slash[1]))
+ return (char*)path;
- while (*path) {
- if ((*path != '/') && (path > ++last)) {
- last = first = path;
- }
- ++path;
- }
+ return slash + 1;
+}
+
+/*
+ * "/" -> "/"
+ * "abc" -> "abc"
+ * "abc/def" -> "def"
+ * "abc/def/" -> "def" !!
+ */
+char* FAST_FUNC bb_get_last_path_component_strip(char *path)
+{
+ char *slash = last_char_is(path, '/');
- if (*first == '/') {
- last = first;
- }
- last[1] = 0;
+ if (slash)
+ while (*slash == '/' && slash != path)
+ *slash-- = '\0';
- return first;
+ return bb_get_last_path_component_nostrip(path);
}