Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 30 Apr 1999 17:12:16 +0000 (17:12 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 30 Apr 1999 17:12:16 +0000 (17:12 +0000)
* string/tester.c (test_strchrnul): New function.
(test_memset): Test one more special case.

* sysdeps/i386/strchrnul.S: Fix bugs which lead to wrong results in

ChangeLog
string/tester.c

index 7c7a9721d35f8f9c955a6715287da78120bcf6b0..56f2786124b5602372eec2235bf1091a49d867fe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,9 @@
 1999-04-30  Ulrich Drepper  <drepper@cygnus.com>
 
-       * sysdeps/i386/strchrnul.S: Fix bugs which let to wrong results in
+       * string/tester.c (test_strchrnul): New function.
+       (test_memset): Test one more special case.
+
+       * sysdeps/i386/strchrnul.S: Fix bugs which lead to wrong results in
        25% of all cases.
 
        * sysdeps/i386/i486/bits/string.h: Replace __uintXX_t types with
index d874fe33790d1d91e83803a0562963e989a4d0cd..96c7aa219c2d032734fd66df6d38f5533878cdd0 100644 (file)
@@ -408,6 +408,40 @@ test_strchr (void)
    }
 }
 
+void
+test_strchrnul (void)
+{
+  const char *os;
+  it = "strchrnul";
+  cp = strchrnul ((os = "abcd"), 'z');
+  check (*cp == '\0', 1);                      /* Not found. */
+  check (cp == os + 4, 2);
+  (void) strcpy (one, "abcd");
+  check (strchrnul (one, 'c') == one+2, 3);    /* Basic test. */
+  check (strchrnul (one, 'd') == one+3, 4);    /* End of string. */
+  check (strchrnul (one, 'a') == one, 5);      /* Beginning. */
+  check (strchrnul (one, '\0') == one+4, 6);   /* Finding NUL. */
+  (void) strcpy (one, "ababa");
+  check (strchrnul (one, 'b') == one+1, 7);    /* Finding first. */
+  (void) strcpy (one, "");
+  check (strchrnul (one, 'b') == one, 8);      /* Empty string. */
+  check (strchrnul (one, '\0') == one, 9);     /* NUL in empty string. */
+  {
+    char buf[4096];
+    int i;
+    char *p;
+    for (i=0; i < 0x100; i++)
+      {
+       p = (char *) ((unsigned long int) (buf + 0xff) & ~0xff) + i;
+       strcpy (p, "OK");
+       strcpy (p+3, "BAD/WRONG");
+       cp = strchrnul (p, '/');
+       check (*cp == '\0', 9+2*i);
+       check (cp == p+2, 10+2*i);
+      }
+   }
+}
+
 void
 test_index (void)
 {
@@ -906,6 +940,8 @@ test_memccpy (void)
 void
 test_memset (void)
 {
+  int i;
+
   it = "memset";
   (void) strcpy(one, "abcdefgh");
   check(memset(one+1, 'x', 3) == one+1, 1);    /* Return value. */
@@ -921,12 +957,16 @@ test_memset (void)
   (void) memset(one+2, 010045, 1);
   equal(one, "ax\045xe", 6);           /* Unsigned char convert. */
 
+  /* Non-8bit fill character.  */
+  memset (one, 0x101, sizeof (one));
+  for (i = 0; i < sizeof (one); ++i)
+    check (one[i] == '\01', 7);
+
   /* Test for more complex versions of memset, for all alignments and
      lengths up to 256. This test takes a little while, perhaps it should
-     be made weaker? */
+     be made weaker?  */
   {
     char data[512];
-    int i;
     int j;
     int k;
     int c;
@@ -938,7 +978,7 @@ test_memset (void)
       for (j = 0; j < 256; j++)
        for (i = 0; i < 256; i++)
          {
-           memset(data+i,c,j);
+           memset (data + i, c, j);
            for (k = 0; k < i; k++)
              if (data[k] != 'x')
                goto fail;
@@ -954,7 +994,7 @@ test_memset (void)
            continue;
 
          fail:
-           check(0,7+i+j*256+(c != 0)*256*256);
+           check (0, 8 + i + j * 256 + (c != 0) * 256 * 256);
          }
   }
 }
@@ -1056,6 +1096,9 @@ main (void)
   /* strchr.  */
   test_strchr ();
 
+  /* strchrnul.  */
+  test_strchrnul ();
+
   /* index - just like strchr.  */
   test_index ();