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