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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1250
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
1 /* basename.c -- return the last element in a path
2718
5994c6f939c5 update copyright date
Jim Meyering <jim@meyering.net>
parents: 1952
diff changeset
2 Copyright (C) 1990, 1998, 1999, 2000 Free Software Foundation, Inc.
1250
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
3
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
4 This program is free software; you can redistribute it and/or modify
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
5 it under the terms of the GNU General Public License as published by
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
7 any later version.
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
8
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
9 This program is distributed in the hope that it will be useful,
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
12 GNU General Public License for more details.
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
13
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
14 You should have received a copy of the GNU General Public License
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
29ccc7d6e9e9 add copyright
Jim Meyering <jim@meyering.net>
parents: 958
diff changeset
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
9
f8dce34b5ab0 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
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
b63f146fd963 indent cpp-directives
Jim Meyering <jim@meyering.net>
parents: 650
diff changeset
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
357903689750 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 1737
diff changeset
45 If NAME is all slashes, be sure to return `/'. */
9
f8dce34b5ab0 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46
f8dce34b5ab0 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
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
f8dce34b5ab0 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
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
f8dce34b5ab0 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
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
f8dce34b5ab0 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70 }