Browse Source

Add in _dl_strrchr

Eric Andersen 24 years ago
parent
commit
8d9ef26757
2 changed files with 42 additions and 10 deletions
  1. 21 5
      ldso/ldso/ld_string.h
  2. 21 5
      ldso/ldso/string.h

+ 21 - 5
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

+ 21 - 5
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