basename.c revision 218822
156893Sfenner/* Return the basename of a pathname. 256893Sfenner This file is in the public domain. */ 356893Sfenner 456893Sfenner/* 556893Sfenner 656893Sfenner@deftypefn Supplemental char* basename (const char *@var{name}) 756893Sfenner 856893SfennerReturns a pointer to the last component of pathname @var{name}. 956893SfennerBehavior is undefined if the pathname ends in a directory separator. 1056893Sfenner 1156893Sfenner@end deftypefn 1256893Sfenner 1356893Sfenner*/ 1456893Sfenner 1556893Sfenner#ifdef HAVE_CONFIG_H 1656893Sfenner#include "config.h" 1756893Sfenner#endif 1856893Sfenner#include "ansidecl.h" 1956893Sfenner#include "libiberty.h" 2056893Sfenner#include "safe-ctype.h" 2156893Sfenner 2256893Sfenner#ifndef DIR_SEPARATOR 2356893Sfenner#define DIR_SEPARATOR '/' 2456893Sfenner#endif 2556893Sfenner 2656893Sfenner#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 2756893Sfenner defined (__OS2__) 2856893Sfenner#define HAVE_DOS_BASED_FILE_SYSTEM 2956893Sfenner#ifndef DIR_SEPARATOR_2 3056893Sfenner#define DIR_SEPARATOR_2 '\\' 3156893Sfenner#endif 3256893Sfenner#endif 3356893Sfenner 3456893Sfenner/* Define IS_DIR_SEPARATOR. */ 3556893Sfenner#ifndef DIR_SEPARATOR_2 3656893Sfenner# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 3756893Sfenner#else /* DIR_SEPARATOR_2 */ 3856893Sfenner# define IS_DIR_SEPARATOR(ch) \ 3956893Sfenner (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4056893Sfenner#endif /* DIR_SEPARATOR_2 */ 4156893Sfenner 4256893Sfennerchar * 4356893Sfennerbasename (const char *name) 4456893Sfenner{ 4556893Sfenner const char *base; 4656893Sfenner 4756893Sfenner#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4856893Sfenner /* Skip over the disk name in MSDOS pathnames. */ 4956893Sfenner if (ISALPHA (name[0]) && name[1] == ':') 5056893Sfenner name += 2; 5156893Sfenner#endif 5256893Sfenner 5356893Sfenner for (base = name; *name; name++) 5456893Sfenner { 5556893Sfenner if (IS_DIR_SEPARATOR (*name)) 5656893Sfenner { 5756893Sfenner base = name + 1; 5856893Sfenner } 5956893Sfenner } 6056893Sfenner return (char *) base; 6156893Sfenner} 6256893Sfenner 6356893Sfenner