libc/string/strrchr.c

Earnie Boyd earnie_boyd@yahoo.com
Fri May 4 05:40:00 GMT 2001


"J. Johnston" wrote:
> 
> Earnie Boyd wrote:
> >
> > This patch improves Cygwin's speed greatly.
> >
> > Earnie.
> >
> 
> Your patch needs a special case for the null terminator.  Both strchr and strrchr treat the null
> terminator as part of the string and allow searches for it.  In your loop, the null terminator can
> be found by strchr() but then you will increment s and will start searching beyond the end of the
> string.
> 

Ok, good catch.  How about this one.
2001-05-04  Earnie Boyd  <earnie@users.sourceforge.net>

	* libc/string/strrchr.c: Use strchr for the speed improvements.

Index: strrchr.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/strrchr.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 strrchr.c
--- strrchr.c	2000/02/17 19:39:48	1.1.1.1
+++ strrchr.c	2001/05/04 12:25:57
@@ -41,21 +41,19 @@ _DEFUN (strrchr, (s, i),
 	int i)
 {
   _CONST char *last = NULL;
-  char c = i;
 
-  while (*s)
+  if (i)
     {
-      if (*s == c)
+      while (s=strchr(s, i))
 	{
 	  last = s;
+	  s++;
 	}
-      s++;
     }
-
-  if (*s == c)
+  else
     {
-      last = s;
+      last = strchr(s, i);
     }
-
+		  
   return (char *) last;
 }


More information about the Newlib mailing list