]> git.sur5r.net Git - openldap/commitdiff
Fix lutil_memrchr():
authorHallvard Furuseth <hallvard@openldap.org>
Mon, 14 Nov 2005 15:40:01 +0000 (15:40 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Mon, 14 Nov 2005 15:40:01 +0000 (15:40 +0000)
Avoid void* pointer arithmetic.
Convert int c to unsigned char, so c=<negative char value> will match.
Do not decrement pointer below start of array (even when value is not used).

libraries/liblutil/utils.c

index d2fea36db2a0a4d84f1d81f5288df3158bb95b7a..d227f328284b1551b4d1e1fe589f09c8af8d7464 100644 (file)
@@ -311,22 +311,21 @@ int mkstemp( char * template )
 }
 #endif
 
-/* 
+/*
  * Memory Reverse Search
  */
 void *
-lutil_memrchr(const void *b, int c, size_t n) 
+lutil_memrchr(const void *b, int c, size_t n)
 {
        if (n != 0) {
-               const unsigned char *s;
+               const unsigned char *s, *bb = b, cc = c;
 
-               for ( s = b + n; s-- > b; ) {
-                       if ( *s == c ) {
-                               return s;
+               for ( s = bb + n; s > bb; ) {
+                       if ( *--s == cc ) {
+                               return (void *) s;
                        }
                }
        }
 
        return NULL;
-} 
-
+}