Mercurial > hg > octave-kai > gnulib-hg
annotate lib/basename.c @ 3063:e0287ca43594
*** empty log message ***
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Tue, 19 Dec 2000 08:16:25 +0000 |
parents | e729332eed5f |
children | 11b1f9a9da67 |
rev | line source |
---|---|
1250 | 1 /* basename.c -- return the last element in a path |
2718 | 2 Copyright (C) 1990, 1998, 1999, 2000 Free Software Foundation, Inc. |
1250 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
15 along with this program; if not, write to the Free Software Foundation, | |
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |
9 | 17 |
922
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
18 #if HAVE_CONFIG_H |
653 | 19 # include <config.h> |
379
0c05dc8a5d05
(basename): Use strrchr, not rindex.
Jim Meyering <jim@meyering.net>
parents:
9
diff
changeset
|
20 #endif |
0c05dc8a5d05
(basename): Use strrchr, not rindex.
Jim Meyering <jim@meyering.net>
parents:
9
diff
changeset
|
21 |
2763
8a832ac25a04
(base_name): Add an assertion.
Jim Meyering <jim@meyering.net>
parents:
2718
diff
changeset
|
22 #include <assert.h> |
8a832ac25a04
(base_name): Add an assertion.
Jim Meyering <jim@meyering.net>
parents:
2718
diff
changeset
|
23 |
922
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
24 #ifndef FILESYSTEM_PREFIX_LEN |
1251
d7d7a33a5fd3
capitalize macro params and protoize
Jim Meyering <jim@meyering.net>
parents:
1250
diff
changeset
|
25 # define FILESYSTEM_PREFIX_LEN(Filename) 0 |
922
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
26 #endif |
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
27 |
1952
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
28 #ifndef PARAMS |
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
29 # if defined PROTOTYPES || (defined __STDC__ && __STDC__) |
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
30 # define PARAMS(Args) Args |
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
31 # else |
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
32 # define PARAMS(Args) () |
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
33 # endif |
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
34 #endif |
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
35 |
922
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
36 #ifndef ISSLASH |
1251
d7d7a33a5fd3
capitalize macro params and protoize
Jim Meyering <jim@meyering.net>
parents:
1250
diff
changeset
|
37 # define ISSLASH(C) ((C) == '/') |
922
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
38 #endif |
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
39 |
1952
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
40 char *base_name PARAMS ((char const *name)); |
8c28becce781
(base_name): Add prototype. From Akim Demaille.
Jim Meyering <jim@meyering.net>
parents:
1738
diff
changeset
|
41 |
922
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
42 /* In general, we can't use the builtin `basename' function if available, |
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
43 since it has different meanings in different environments. |
1737
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
44 In some environments the builtin `basename' modifies its argument. |
1738 | 45 If NAME is all slashes, be sure to return `/'. */ |
9 | 46 |
47 char * | |
1251
d7d7a33a5fd3
capitalize macro params and protoize
Jim Meyering <jim@meyering.net>
parents:
1250
diff
changeset
|
48 base_name (char const *name) |
9 | 49 { |
922
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
50 char const *base = name += FILESYSTEM_PREFIX_LEN (name); |
1737
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
51 int all_slashes = 1; |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
52 char const *p; |
9 | 53 |
1737
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
54 for (p = name; *p; p++) |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
55 { |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
56 if (ISSLASH (*p)) |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
57 base = p + 1; |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
58 else |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
59 all_slashes = 0; |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
60 } |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
61 |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
62 /* If NAME is all slashes, arrange to return `/'. */ |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
63 if (*base == '\0' && ISSLASH (*name) && all_slashes) |
c6a6decaf2ad
(base_name): If NAME is all slashes, return `/' (in
Jim Meyering <jim@meyering.net>
parents:
1251
diff
changeset
|
64 --base; |
922
9cb09b60925d
Update from FSF via patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
653
diff
changeset
|
65 |
2763
8a832ac25a04
(base_name): Add an assertion.
Jim Meyering <jim@meyering.net>
parents:
2718
diff
changeset
|
66 /* Make sure the last byte is not a slash. */ |
2786
e729332eed5f
(base_name): Use ISSLASH rather than comparing against `/'.
Jim Meyering <jim@meyering.net>
parents:
2763
diff
changeset
|
67 assert (all_slashes || !ISSLASH (*(p - 1))); |
2763
8a832ac25a04
(base_name): Add an assertion.
Jim Meyering <jim@meyering.net>
parents:
2718
diff
changeset
|
68 |
590
cf44c49093fd
(basename): Rewrite so it doesn't rely on strrchr,
Jim Meyering <jim@meyering.net>
parents:
421
diff
changeset
|
69 return (char *) base; |
9 | 70 } |