Start 1.33.0 development cycle
[oweals/busybox.git] / libbb / get_last_path_component.c
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
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  */
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  */
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 }