1121326Sharti/* Return the basename of a pathname. 2121326Sharti This file is in the public domain. */ 3121326Sharti 4121326Sharti/* 5121326Sharti 6121326Sharti@deftypefn Supplemental char* basename (const char *@var{name}) 7121326Sharti 8121326ShartiReturns a pointer to the last component of pathname @var{name}. 9121326ShartiBehavior is undefined if the pathname ends in a directory separator. 10121326Sharti 11121326Sharti@end deftypefn 12121326Sharti 13121326Sharti*/ 14121326Sharti 15121326Sharti#ifdef HAVE_CONFIG_H 16121326Sharti#include "config.h" 17121326Sharti#endif 18121326Sharti#include "ansidecl.h" 19121326Sharti#include "libiberty.h" 20121326Sharti#include "safe-ctype.h" 21121326Sharti 22121326Sharti#ifndef DIR_SEPARATOR 23121326Sharti#define DIR_SEPARATOR '/' 24121326Sharti#endif 25121326Sharti 26121326Sharti#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 27121326Sharti defined (__OS2__) 28121326Sharti#define HAVE_DOS_BASED_FILE_SYSTEM 29131826Sharti#ifndef DIR_SEPARATOR_2 30121326Sharti#define DIR_SEPARATOR_2 '\\' 31121326Sharti#endif 32121326Sharti#endif 33121326Sharti 34121326Sharti/* Define IS_DIR_SEPARATOR. */ 35121326Sharti#ifndef DIR_SEPARATOR_2 36121326Sharti# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 37121326Sharti#else /* DIR_SEPARATOR_2 */ 38121326Sharti# define IS_DIR_SEPARATOR(ch) \ 39121326Sharti (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 40121326Sharti#endif /* DIR_SEPARATOR_2 */ 41121326Sharti 42121326Shartichar * 43121326Shartibasename (const char *name) 44121326Sharti{ 45121326Sharti const char *base; 46121326Sharti 47121326Sharti#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 48121326Sharti /* Skip over the disk name in MSDOS pathnames. */ 49121326Sharti if (ISALPHA (name[0]) && name[1] == ':') 50121326Sharti name += 2; 51121326Sharti#endif 52121326Sharti 53121326Sharti for (base = name; *name; name++) 54121326Sharti { 55121326Sharti if (IS_DIR_SEPARATOR (*name)) 56121326Sharti { 57121326Sharti base = name + 1; 58121326Sharti } 59121326Sharti } 60121326Sharti return (char *) base; 61121326Sharti} 62121326Sharti 63121326Sharti