beta-0.89.2
[luatex.git] / source / texk / kpathsea / xbasename.c
blobc66da1cf62242483d93846a10f446a12c215187f
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")'
26 returns "bar.baz". */
28 const_string
29 xbasename (const_string name)
31 const_string base = name;
32 const_string p;
34 if (NAME_BEGINS_WITH_DEVICE(name))
35 base += 2;
37 else if (IS_UNC_NAME(name)) {
38 unsigned limit;
40 for (limit = 2; name[limit] && !IS_DIR_SEP (name[limit]); limit++)
41 #if defined(WIN32)
42 if (IS_KANJI(name+limit)) limit++
43 #endif
45 if (name[limit++] && name[limit] && !IS_DIR_SEP (name[limit])) {
46 for (; name[limit] && !IS_DIR_SEP (name[limit]); limit++)
47 #if defined(WIN32)
48 if (IS_KANJI(name+limit)) limit++
49 #endif
51 } else
52 /* malformed UNC name, backup */
53 limit = 0;
54 base += limit;
57 for (p = base; *p; p++) {
58 if (IS_DIR_SEP(*p))
59 base = p + 1;
60 #if defined(WIN32)
61 else if (IS_KANJI(p))
62 p++;
63 #endif
66 return base;