1 /* xbasename.c: return the last element in a path.
3 Copyright 1992, 1994, 1995, 1996, 2008, 2011 Karl Berry.
4 Copyright 2005 Olaf Weber.
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 This library 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 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with this library; if not, see <http://www.gnu.org/licenses/>. */
19 /* Have to include this first to get c-auto.h. */
20 #include <kpathsea/config.h>
22 #include <kpathsea/c-pathch.h>
24 /* Return NAME with any leading path stripped off. This returns a
25 pointer into NAME. For example, `basename ("/foo/bar.baz")'
29 xbasename (const_string name
)
31 const_string base
= name
;
34 if (NAME_BEGINS_WITH_DEVICE(name
))
37 else if (IS_UNC_NAME(name
)) {
40 for (limit
= 2; name
[limit
] && !IS_DIR_SEP (name
[limit
]); limit
++)
42 if (IS_KANJI(name
+limit
)) limit
++
45 if (name
[limit
++] && name
[limit
] && !IS_DIR_SEP (name
[limit
])) {
46 for (; name
[limit
] && !IS_DIR_SEP (name
[limit
]); limit
++)
48 if (IS_KANJI(name
+limit
)) limit
++
52 /* malformed UNC name, backup */
57 for (p
= base
; *p
; p
++) {