From 8d9ef2675702a7c9c28008b0bff356bcc2783ac4 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 10 May 2001 04:23:19 +0000 Subject: Add in _dl_strrchr --- ldso/ldso/ld_string.h | 26 +++++++++++++++++++++----- ldso/ldso/string.h | 26 +++++++++++++++++++++----- 2 files changed, 42 insertions(+), 10 deletions(-) (limited to 'ldso') diff --git a/ldso/ldso/ld_string.h b/ldso/ldso/ld_string.h index 5d18bb788..5e912ea9d 100644 --- a/ldso/ldso/ld_string.h +++ b/ldso/ldso/ld_string.h @@ -7,6 +7,15 @@ #define NULL ((void *) 0) #endif +extern inline size_t _dl_strlen(const char * str) +{ + register char *ptr = (char *) str; + + while (*ptr) + ptr++; + return (ptr - str); +} + extern inline char * _dl_strcpy(char * dst,const char *src) { register char *ptr = dst; @@ -63,14 +72,22 @@ extern inline char * _dl_strchr(const char * str,int c) return 0; } - -extern inline size_t _dl_strlen(const char * str) +static inline char *_dl_strrchr(const char *str, int c) { + register char *prev = 0; register char *ptr = (char *) str; - while (*ptr) + /* For null it's just like strlen */ + if (c == '\0') { + return ptr + _dl_strlen(ptr); + } + + /* everything else just step along the string. */ + while ((ptr = _dl_strchr(ptr, c)) != 0) { + prev = ptr; ptr++; - return (ptr - str); + } + return prev; } extern inline void * _dl_memcpy(void * dst, const void * src, size_t len) @@ -143,5 +160,4 @@ static inline char *_dl_simple_ltoahex(unsigned long i) return p + 1; } - #endif diff --git a/ldso/ldso/string.h b/ldso/ldso/string.h index 5d18bb788..5e912ea9d 100644 --- a/ldso/ldso/string.h +++ b/ldso/ldso/string.h @@ -7,6 +7,15 @@ #define NULL ((void *) 0) #endif +extern inline size_t _dl_strlen(const char * str) +{ + register char *ptr = (char *) str; + + while (*ptr) + ptr++; + return (ptr - str); +} + extern inline char * _dl_strcpy(char * dst,const char *src) { register char *ptr = dst; @@ -63,14 +72,22 @@ extern inline char * _dl_strchr(const char * str,int c) return 0; } - -extern inline size_t _dl_strlen(const char * str) +static inline char *_dl_strrchr(const char *str, int c) { + register char *prev = 0; register char *ptr = (char *) str; - while (*ptr) + /* For null it's just like strlen */ + if (c == '\0') { + return ptr + _dl_strlen(ptr); + } + + /* everything else just step along the string. */ + while ((ptr = _dl_strchr(ptr, c)) != 0) { + prev = ptr; ptr++; - return (ptr - str); + } + return prev; } extern inline void * _dl_memcpy(void * dst, const void * src, size_t len) @@ -143,5 +160,4 @@ static inline char *_dl_simple_ltoahex(unsigned long i) return p + 1; } - #endif -- cgit v1.2.3