aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Huth <thuth@redhat.com>2018-05-18 17:45:34 +0200
committerAlexey Kardashevskiy <aik@ozlabs.ru>2018-05-24 19:03:52 +1000
commitf5825039ffed4508f07abda271ec836a3fa43bf4 (patch)
tree92b0c4e4a7480beba3a4b4d349e1a1bb7e467323
parent4183816dccb5b2da64cc7f1d5a8239d9d90dd0a6 (diff)
downloadSLOF-f5825039ffed4508f07abda271ec836a3fa43bf4.zip
SLOF-f5825039ffed4508f07abda271ec836a3fa43bf4.tar.gz
SLOF-f5825039ffed4508f07abda271ec836a3fa43bf4.tar.bz2
libc: Implement strrchr()
This function will be used in one of the next patches to find the last slash in a file name string. Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
-rw-r--r--lib/libc/string/Makefile.inc2
-rw-r--r--lib/libc/string/strrchr.c28
2 files changed, 29 insertions, 1 deletions
diff --git a/lib/libc/string/Makefile.inc b/lib/libc/string/Makefile.inc
index 7ccf3c4..0a77738 100644
--- a/lib/libc/string/Makefile.inc
+++ b/lib/libc/string/Makefile.inc
@@ -13,7 +13,7 @@
STRING_SRC_C = strcat.c strchr.c strcmp.c strcpy.c strlen.c strncmp.c \
strncpy.c strstr.c memset.c memcpy.c memmove.c memchr.c \
- memcmp.c strcasecmp.c strncasecmp.c strtok.c
+ memcmp.c strcasecmp.c strncasecmp.c strtok.c strrchr.c
STRING_SRC_ASM =
STRING_SRCS = $(STRING_SRC_C:%=$(STRINGCMNDIR)/%) $(STRING_SRC_ASM:%=$(STRINGCMNDIR)/%)
STRING_OBJS = $(STRING_SRC_C:%.c=%.o) $(STRING_SRC_ASM:%.S=%.o)
diff --git a/lib/libc/string/strrchr.c b/lib/libc/string/strrchr.c
new file mode 100644
index 0000000..ccfaa9f
--- /dev/null
+++ b/lib/libc/string/strrchr.c
@@ -0,0 +1,28 @@
+/******************************************************************************
+ * libc strrchr() implementation
+ *
+ * This program and the accompanying materials are made available under
+ * the terms of the BSD License which accompanies this distribution, and
+ * is available at http://www.opensource.org/licenses/bsd-license.php
+ *
+ * Contributors:
+ * Thomas Huth - initial implementation
+ *****************************************************************************/
+
+#include <string.h>
+
+char *
+strrchr(const char *s, int c)
+{
+ char cb = c;
+ char *ptr = (char *)s + strlen(s) - 1;
+
+ while (ptr >= s) {
+ if (*ptr == cb) {
+ return ptr;
+ }
+ --ptr;
+ }
+
+ return NULL;
+}