summaryrefslogtreecommitdiff
path: root/libbb/get_last_path_component.c
diff options
context:
space:
mode:
authorDenis Vlasenko2007-09-24 18:27:04 +0000
committerDenis Vlasenko2007-09-24 18:27:04 +0000
commit818322b9b19a452d66a07ca69256e2c092f5db5f (patch)
tree0b34390ac0cd61951bb9dc5b9fd3a226dae4f1ef /libbb/get_last_path_component.c
parenta7ce207bd82882d6436d256a73c42ca4c8500ff3 (diff)
downloadbusybox-818322b9b19a452d66a07ca69256e2c092f5db5f.zip
busybox-818322b9b19a452d66a07ca69256e2c092f5db5f.tar.gz
*: kill bb_get_last_path_component, replace with two functions
(one which strips trailing slash and one which does not) wget: straighten out as a result of above change text data bss dec hex filename 5056 1 0 5057 13c1 busybox.t4/networking/wget.o 5022 0 0 5022 139e busybox.t5/networking/wget.o
Diffstat (limited to 'libbb/get_last_path_component.c')
-rw-r--r--libbb/get_last_path_component.c42
1 files changed, 26 insertions, 16 deletions
diff --git a/libbb/get_last_path_component.c b/libbb/get_last_path_component.c
index b7bc0e6..0f60215 100644
--- a/libbb/get_last_path_component.c
+++ b/libbb/get_last_path_component.c
@@ -8,25 +8,35 @@
*/
#include "libbb.h"
-
-char *bb_get_last_path_component(char *path)
+/*
+ * "/" -> "/"
+ * "abc" -> "abc"
+ * "abc/def" -> "def"
+ * "abc/def/" -> ""
+ */
+char *bb_get_last_path_component_nostrip(const char *path)
{
- char *first = path;
- char *last;
+ char *slash = strrchr(path, '/');
+
+ if (!slash || (slash == path && !slash[1]))
+ return (char*)path;
- last = path - 1;
+ return slash + 1;
+}
- while (*path) {
- if ((*path != '/') && (path > ++last)) {
- last = first = path;
- }
- ++path;
- }
+/*
+ * "/" -> "/"
+ * "abc" -> "abc"
+ * "abc/def" -> "def"
+ * "abc/def/" -> "def" !!
+ */
+char *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);
}