/src/binutils-gdb/libiberty/lbasename.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* Libiberty basename. Like basename, but is not overridden by the |
2 | | system C library. |
3 | | Copyright (C) 2001-2025 Free Software Foundation, Inc. |
4 | | |
5 | | This file is part of the libiberty library. |
6 | | Libiberty is free software; you can redistribute it and/or |
7 | | modify it under the terms of the GNU Library General Public |
8 | | License as published by the Free Software Foundation; either |
9 | | version 2 of the License, or (at your option) any later version. |
10 | | |
11 | | Libiberty is distributed in the hope that it will be useful, |
12 | | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | | Library General Public License for more details. |
15 | | |
16 | | You should have received a copy of the GNU Library General Public |
17 | | License along with libiberty; see the file COPYING.LIB. If |
18 | | not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, |
19 | | Boston, MA 02110-1301, USA. */ |
20 | | |
21 | | /* |
22 | | |
23 | | @deftypefn Replacement {const char*} lbasename (const char *@var{name}) |
24 | | |
25 | | Given a pointer to a string containing a typical pathname |
26 | | (@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the |
27 | | last component of the pathname (@samp{ls.c} in this case). The |
28 | | returned pointer is guaranteed to lie within the original |
29 | | string. This latter fact is not true of many vendor C |
30 | | libraries, which return special strings or modify the passed |
31 | | strings for particular input. |
32 | | |
33 | | In particular, the empty string returns the same empty string, |
34 | | and a path ending in @code{/} returns the empty string after it. |
35 | | |
36 | | @end deftypefn |
37 | | |
38 | | */ |
39 | | |
40 | | #ifdef HAVE_CONFIG_H |
41 | | #include "config.h" |
42 | | #endif |
43 | | #include "ansidecl.h" |
44 | | #include "libiberty.h" |
45 | | #include "safe-ctype.h" |
46 | | #include "filenames.h" |
47 | | |
48 | | const char * |
49 | | unix_lbasename (const char *name) |
50 | 2.41k | { |
51 | 2.41k | const char *base; |
52 | | |
53 | 63.4k | for (base = name; *name; name++) |
54 | 61.0k | if (IS_UNIX_DIR_SEPARATOR (*name)) |
55 | 4.08k | base = name + 1; |
56 | | |
57 | 2.41k | return base; |
58 | 2.41k | } |
59 | | |
60 | | const char * |
61 | | dos_lbasename (const char *name) |
62 | 0 | { |
63 | 0 | const char *base; |
64 | | |
65 | | /* Skip over a possible disk name. */ |
66 | 0 | if (ISALPHA (name[0]) && name[1] == ':') |
67 | 0 | name += 2; |
68 | |
|
69 | 0 | for (base = name; *name; name++) |
70 | 0 | if (IS_DOS_DIR_SEPARATOR (*name)) |
71 | 0 | base = name + 1; |
72 | |
|
73 | 0 | return base; |
74 | 0 | } |
75 | | |
76 | | const char * |
77 | | lbasename (const char *name) |
78 | 2.41k | { |
79 | | #if defined (HAVE_DOS_BASED_FILE_SYSTEM) |
80 | | return dos_lbasename (name); |
81 | | #else |
82 | 2.41k | return unix_lbasename (name); |
83 | 2.41k | #endif |
84 | 2.41k | } |