summaryrefslogtreecommitdiffstats
path: root/newlib/libc/string/gnu_basename.c
diff options
context:
space:
mode:
authorYaakov Selkowitz <yselkowi@redhat.com>2015-03-25 18:19:38 -0500
committerCorinna Vinschen <corinna@vinschen.de>2015-04-23 21:57:07 +0200
commitd67052321ec17d82bd7da35ae3fd87eecd7b376f (patch)
treec2f220da7864776b214db15fd99936a77e47f051 /newlib/libc/string/gnu_basename.c
parentd4f8c94a9b62706d88f8b6b80697023ab32ae497 (diff)
downloadcygnal-d67052321ec17d82bd7da35ae3fd87eecd7b376f.tar.gz
cygnal-d67052321ec17d82bd7da35ae3fd87eecd7b376f.tar.bz2
cygnal-d67052321ec17d82bd7da35ae3fd87eecd7b376f.zip
string: add GNU basename(3)
* libc/include/libgen.h (_BASENAME_DEFINED): Define. * libc/include/string.h (basename): Declare. * libc/string/Makefile.am (ELIX_4_SOURCES): Add gnu_basename.c. * libc/string/Makefile.in: Regenerate. * libc/string/gnu_basename.c: New file.
Diffstat (limited to 'newlib/libc/string/gnu_basename.c')
-rw-r--r--newlib/libc/string/gnu_basename.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/newlib/libc/string/gnu_basename.c b/newlib/libc/string/gnu_basename.c
new file mode 100644
index 000000000..46b92d0fd
--- /dev/null
+++ b/newlib/libc/string/gnu_basename.c
@@ -0,0 +1,26 @@
+#ifndef _NO_BASENAME
+/* Copyright 2015 Red Hat, Inc.
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+/* The differences with the POSIX version (unix/basename.c):
+ * - declared in <string.h> (instead of <libgen.h>);
+ * - the argument is never modified, and therefore is marked const;
+ * - the empty string is returned if path is an empty string, "/", or ends
+ * with a trailing slash.
+ */
+
+#include <string.h>
+
+char *
+_DEFUN (__gnu_basename, (path),
+ const char *path)
+{
+ char *p;
+ if ((p = strrchr (path, '/')))
+ return p + 1;
+ return path;
+}
+
+#endif /* !_NO_BASENAME */