Mercurial > hg > octave-nkf > gnulib-hg
changeset 957:8f236bb14756
(base_name_strip_trailing_slashes): new function.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sun, 29 Jun 1997 22:25:54 +0000 |
parents | 24e82295daf8 |
children | 498dc8724967 |
files | lib/basename.c |
diffstat | 1 files changed, 68 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/basename.c +++ b/lib/basename.c @@ -28,3 +28,71 @@ return (char *) base; } + +#ifdef STDC_HEADERS +# include <stdlib.h> +#else +char *malloc (); +#endif + +char * +base_name_strip_trailing_slashes (name) + char const *name; +{ + char const *end_p = name += FILESYSTEM_PREFIX_LEN (name); + char const *first, *p; + char *base; + int length; + + /* Make END_P point to the byte after the last non-slash character + in NAME if one exists. */ + for (p = name; *p; p++) + if (!ISSLASH (*p)) + end_p = p + 1; + + if (end_p == name) + { + first = end_p; + } + else + { + first = end_p - 1; + while (first > name && !ISSLASH (*(first - 1))) + --first; + } + + length = end_p - first; + base = (char *) malloc (length + 1); + if (base == 0) + return 0; + + memcpy (base, first, length); + base[length] = '\0'; + + return base; +} + +#ifdef TEST +# include <assert.h> +# include <stdlib.h> + +# define CHECK(a,b) assert (strcmp (base_name_strip_trailing_slashes(a), b) \ + == 0) + +int +main () +{ + CHECK ("a", "a"); + CHECK ("ab", "ab"); + CHECK ("ab/c", "c"); + CHECK ("/ab/c", "c"); + CHECK ("/ab/c/", "c"); + CHECK ("/ab/c////", "c"); + CHECK ("/", ""); + CHECK ("////", ""); + CHECK ("////a", "a"); + CHECK ("//a//", "a"); + CHECK ("/a", "a"); + exit (0); +} +#endif