1 /* vi: set sw=4 ts=4: */
2 /*
3  * bb_get_last_path_component implementation for busybox
4  *
5  * Copyright (C) 2001  Manuel Novoa III  <mjn3@codepoet.org>
6  *
7  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
8  */
9 #include "libbb.h"
10 
bb_basename(const char * name)11 const char* FAST_FUNC bb_basename(const char *name)
12 {
13 	const char *cp = strrchr(name, '/');
14 	if (cp)
15 		return cp + 1;
16 	return name;
17 }
18 
19 /*
20  * "/"        -> "/"
21  * "abc"      -> "abc"
22  * "abc/def"  -> "def"
23  * "abc/def/" -> ""
24  */
bb_get_last_path_component_nostrip(const char * path)25 char* FAST_FUNC bb_get_last_path_component_nostrip(const char *path)
26 {
27 	char *slash = strrchr(path, '/');
28 
29 	if (!slash || (slash == path && !slash[1]))
30 		return (char*)path;
31 
32 	return slash + 1;
33 }
34 
35 /*
36  * "/"        -> "/"
37  * "abc"      -> "abc"
38  * "abc/def"  -> "def"
39  * "abc/def/" -> "def" !!
40  */
bb_get_last_path_component_strip(char * path)41 char* FAST_FUNC bb_get_last_path_component_strip(char *path)
42 {
43 	char *slash = last_char_is(path, '/');
44 
45 	if (slash)
46 		while (*slash == '/' && slash != path)
47 			*slash-- = '\0';
48 
49 	return bb_get_last_path_component_nostrip(path);
50 }
51