projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add tests for gunzip
[oweals/busybox.git]
/
libbb
/
get_last_path_component.c
diff --git
a/libbb/get_last_path_component.c
b/libbb/get_last_path_component.c
index 31190972668dda1ea004d3cf19cd68e579d844d6..0f602157d970ea177d32f8843b995027da4c1532 100644
(file)
--- a/
libbb/get_last_path_component.c
+++ b/
libbb/get_last_path_component.c
@@
-8,25
+8,35
@@
*/
#include "libbb.h"
*/
#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)
;
}
}