You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.3 KiB
62 lines
1.3 KiB
/* 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; |
|
} |
|
|
|
|