diff mbox series

[5/9] libc: Implement strrchr()

Message ID 1526578856-30967-6-git-send-email-thuth@redhat.com
State Superseded
Headers show
Series Support network booting with pxelinux.cfg files | expand

Commit Message

Thomas Huth May 17, 2018, 5:40 p.m. UTC
This function will be used in one of the next patches to find the last
slash in a file name string.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 lib/libc/string/Makefile.inc |  2 +-
 lib/libc/string/strrchr.c    | 28 ++++++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)
 create mode 100644 lib/libc/string/strrchr.c

Comments

Greg Kurz May 18, 2018, 10:49 a.m. UTC | #1
On Thu, 17 May 2018 19:40:52 +0200
Thomas Huth <thuth@redhat.com> wrote:

> This function will be used in one of the next patches to find the last
> slash in a file name string.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  lib/libc/string/Makefile.inc |  2 +-
>  lib/libc/string/strrchr.c    | 28 ++++++++++++++++++++++++++++
>  2 files changed, 29 insertions(+), 1 deletion(-)
>  create mode 100644 lib/libc/string/strrchr.c
> 
> 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..7824020
> --- /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 -= 1;

ptr-- ?

Anway,

Reviewed-by: Greg Kurz <groug@kaod.org>

> +	}
> +
> +	return NULL;
> +}
diff mbox series

Patch

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..7824020
--- /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 -= 1;
+	}
+
+	return NULL;
+}