123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /* Return the basename of a pathname.
- This file is in the public domain. */
- /*
- @deftypefn Supplemental char* basename (const char *@var{name})
- Returns a pointer to the last component of pathname @var{name}.
- Behavior is undefined if the pathname ends in a directory separator.
- @end deftypefn
- */
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- #include "ansidecl.h"
- #include "libiberty.h"
- #include "safe-ctype.h"
- #ifndef DIR_SEPARATOR
- #define DIR_SEPARATOR '/'
- #endif
- #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
- defined (__OS2__)
- #define HAVE_DOS_BASED_FILE_SYSTEM
- #ifndef DIR_SEPARATOR_2
- #define DIR_SEPARATOR_2 '\\'
- #endif
- #endif
- /* Define IS_DIR_SEPARATOR. */
- #ifndef DIR_SEPARATOR_2
- # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
- #else /* DIR_SEPARATOR_2 */
- # define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
- #endif /* DIR_SEPARATOR_2 */
- char *
- basename (const char *name)
- {
- const char *base;
- #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* Skip over the disk name in MSDOS pathnames. */
- if (ISALPHA (name[0]) && name[1] == ':')
- name += 2;
- #endif
- for (base = name; *name; name++)
- {
- if (IS_DIR_SEPARATOR (*name))
- {
- base = name + 1;
- }
- }
- return (char *) base;
- }
|