OSDN Git Service

Add in _dl_strrchr
authorEric Andersen <andersen@codepoet.org>
Thu, 10 May 2001 04:23:19 +0000 (04:23 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 10 May 2001 04:23:19 +0000 (04:23 -0000)
ldso/ldso/ld_string.h
ldso/ldso/string.h

index 5d18bb7..5e912ea 100644 (file)
@@ -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
index 5d18bb7..5e912ea 100644 (file)
@@ -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