xref: /netbsd-src/external/gpl3/gcc.old/dist/libiberty/lbasename.c (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
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