11debfc3dSmrg /* Libiberty basename. Like basename, but is not overridden by the
21debfc3dSmrg system C library.
3*8feb0f0bSmrg Copyright (C) 2001-2020 Free Software Foundation, Inc.
41debfc3dSmrg
51debfc3dSmrg This file is part of the libiberty library.
61debfc3dSmrg Libiberty is free software; you can redistribute it and/or
71debfc3dSmrg modify it under the terms of the GNU Library General Public
81debfc3dSmrg License as published by the Free Software Foundation; either
91debfc3dSmrg version 2 of the License, or (at your option) any later version.
101debfc3dSmrg
111debfc3dSmrg Libiberty is distributed in the hope that it will be useful,
121debfc3dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of
131debfc3dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
141debfc3dSmrg Library General Public License for more details.
151debfc3dSmrg
161debfc3dSmrg You should have received a copy of the GNU Library General Public
171debfc3dSmrg License along with libiberty; see the file COPYING.LIB. If
181debfc3dSmrg not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
191debfc3dSmrg Boston, MA 02110-1301, USA. */
201debfc3dSmrg
211debfc3dSmrg /*
221debfc3dSmrg
231debfc3dSmrg @deftypefn Replacement {const char*} lbasename (const char *@var{name})
241debfc3dSmrg
251debfc3dSmrg Given a pointer to a string containing a typical pathname
261debfc3dSmrg (@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the
271debfc3dSmrg last component of the pathname (@samp{ls.c} in this case). The
281debfc3dSmrg returned pointer is guaranteed to lie within the original
291debfc3dSmrg string. This latter fact is not true of many vendor C
301debfc3dSmrg libraries, which return special strings or modify the passed
311debfc3dSmrg strings for particular input.
321debfc3dSmrg
331debfc3dSmrg In particular, the empty string returns the same empty string,
341debfc3dSmrg and a path ending in @code{/} returns the empty string after it.
351debfc3dSmrg
361debfc3dSmrg @end deftypefn
371debfc3dSmrg
381debfc3dSmrg */
391debfc3dSmrg
401debfc3dSmrg #ifdef HAVE_CONFIG_H
411debfc3dSmrg #include "config.h"
421debfc3dSmrg #endif
431debfc3dSmrg #include "ansidecl.h"
441debfc3dSmrg #include "libiberty.h"
451debfc3dSmrg #include "safe-ctype.h"
461debfc3dSmrg #include "filenames.h"
471debfc3dSmrg
481debfc3dSmrg const char *
unix_lbasename(const char * name)491debfc3dSmrg unix_lbasename (const char *name)
501debfc3dSmrg {
511debfc3dSmrg const char *base;
521debfc3dSmrg
531debfc3dSmrg for (base = name; *name; name++)
541debfc3dSmrg if (IS_UNIX_DIR_SEPARATOR (*name))
551debfc3dSmrg base = name + 1;
561debfc3dSmrg
571debfc3dSmrg return base;
581debfc3dSmrg }
591debfc3dSmrg
601debfc3dSmrg const char *
dos_lbasename(const char * name)611debfc3dSmrg dos_lbasename (const char *name)
621debfc3dSmrg {
631debfc3dSmrg const char *base;
641debfc3dSmrg
651debfc3dSmrg /* Skip over a possible disk name. */
661debfc3dSmrg if (ISALPHA (name[0]) && name[1] == ':')
671debfc3dSmrg name += 2;
681debfc3dSmrg
691debfc3dSmrg for (base = name; *name; name++)
701debfc3dSmrg if (IS_DOS_DIR_SEPARATOR (*name))
711debfc3dSmrg base = name + 1;
721debfc3dSmrg
731debfc3dSmrg return base;
741debfc3dSmrg }
751debfc3dSmrg
761debfc3dSmrg const char *
lbasename(const char * name)771debfc3dSmrg lbasename (const char *name)
781debfc3dSmrg {
791debfc3dSmrg #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
801debfc3dSmrg return dos_lbasename (name);
811debfc3dSmrg #else
821debfc3dSmrg return unix_lbasename (name);
831debfc3dSmrg #endif
841debfc3dSmrg }
85