Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* Libiberty basename.  Like basename, but is not overridden by the
  2.    system C library.
  3.    Copyright (C) 2001, 2002, 2010 Free Software Foundation, Inc.
  4.  
  5. This file is part of the libiberty library.
  6. Libiberty is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU Library General Public
  8. License as published by the Free Software Foundation; either
  9. version 2 of the License, or (at your option) any later version.
  10.  
  11. Libiberty is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. Library General Public License for more details.
  15.  
  16. You should have received a copy of the GNU Library General Public
  17. License along with libiberty; see the file COPYING.LIB.  If
  18. not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
  19. Boston, MA 02110-1301, USA.  */
  20.  
  21. /*
  22.  
  23. @deftypefn Replacement {const char*} lbasename (const char *@var{name})
  24.  
  25. Given a pointer to a string containing a typical pathname
  26. (@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the
  27. last component of the pathname (@samp{ls.c} in this case).  The
  28. returned pointer is guaranteed to lie within the original
  29. string.  This latter fact is not true of many vendor C
  30. libraries, which return special strings or modify the passed
  31. strings for particular input.
  32.  
  33. In particular, the empty string returns the same empty string,
  34. and a path ending in @code{/} returns the empty string after it.
  35.  
  36. @end deftypefn
  37.  
  38. */
  39.  
  40. #ifdef HAVE_CONFIG_H
  41. #include "config.h"
  42. #endif
  43. #include "ansidecl.h"
  44. #include "libiberty.h"
  45. #include "safe-ctype.h"
  46. #include "filenames.h"
  47.  
  48. const char *
  49. unix_lbasename (const char *name)
  50. {
  51.   const char *base;
  52.  
  53.   for (base = name; *name; name++)
  54.     if (IS_UNIX_DIR_SEPARATOR (*name))
  55.       base = name + 1;
  56.  
  57.   return base;
  58. }
  59.  
  60. const char *
  61. dos_lbasename (const char *name)
  62. {
  63.   const char *base;
  64.  
  65.   /* Skip over a possible disk name.  */
  66.   if (ISALPHA (name[0]) && name[1] == ':')
  67.     name += 2;
  68.  
  69.   for (base = name; *name; name++)
  70.     if (IS_DOS_DIR_SEPARATOR (*name))
  71.       base = name + 1;
  72.  
  73.   return base;
  74. }
  75.  
  76. const char *
  77. lbasename (const char *name)
  78. {
  79. #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
  80.   return dos_lbasename (name);
  81. #else
  82.   return unix_lbasename (name);
  83. #endif
  84. }
  85.