From 3d2632da28a95424a65f36731ff070e74a7f19bf Mon Sep 17 00:00:00 2001 From: Armin Luntzer <armin.luntzer@univie.ac.at> Date: Mon, 1 Oct 2018 11:11:10 +0200 Subject: [PATCH] implement strchr() --- arch/sparc/kernel/ttable.S | 4 +--- include/kernel/string.h | 2 ++ lib/string.c | 27 +++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/arch/sparc/kernel/ttable.S b/arch/sparc/kernel/ttable.S index 6d86481..ececfbb 100644 --- a/arch/sparc/kernel/ttable.S +++ b/arch/sparc/kernel/ttable.S @@ -145,8 +145,6 @@ hw_div0_trap_handler: nmi_entry: .global reg_access_trap_handler reg_access_trap_handler: - .global strchr -strchr: .global syscall_tbl syscall_tbl: .global syscall_trap @@ -159,4 +157,4 @@ syscall_trap: unimpl_flush_trap_handler: .global watchpoint_det_trap_handler watchpoint_det_trap_handler: - ta 0 + ta 3 diff --git a/include/kernel/string.h b/include/kernel/string.h index b5a18ad..4296a80 100644 --- a/include/kernel/string.h +++ b/include/kernel/string.h @@ -20,6 +20,8 @@ char *strpbrk(const char *s, const char *accept); char *strsep(char **stringp, const char *delim); char *strdup(const char *s); +char *strchr(const char *s, int c); + char *strstr(const char *haystack, const char *needle); size_t strlen(const char *s); int memcmp(const void *s1, const void *s2, size_t n); diff --git a/lib/string.c b/lib/string.c index 2711901..6a50f1c 100644 --- a/lib/string.c +++ b/lib/string.c @@ -172,6 +172,33 @@ char *strdup(const char *s) EXPORT_SYMBOL(strdup); +/** + * @brief locate a character in string + * + * @param s the string to search in + * @param c the character to search for + * + * @returns a pointer to the first matched character or NULL if not found + * + * @note the terminating null byte is considered part of the string, so that if + * c is given as '\0', the function returns a pointer to the terminator + */ + +char *strchr(const char *s, int c) +{ + while ((*s) != (char) c) { + + if ((*s) == '\0') + return NULL; + + s++; + } + + return (char *) s; +} +EXPORT_SYMBOL(strchr); + + /** * @brief calculate the length of a string * -- GitLab