Update.
authorUlrich Drepper <drepper@redhat.com>
Mon, 3 Jan 2000 17:00:25 +0000 (17:00 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 3 Jan 2000 17:00:25 +0000 (17:00 +0000)
2000-01-03  Andreas Jaeger  <aj@suse.de>

* include/resolv.h: Remove declarations for __ns_name_ntop and
__ns_name_unpack since those are available in resolv/arpa/nameser.h.

2000-01-03  Andreas Jaeger  <aj@suse.de>

* time/tst-strptime.c (test_tm): Add tests for all fields of
struct tm.

2000-01-03  Ulrich Drepper  <drepper@cygnus.com>

* string/bits/string2.h (__strsep_g): Don't handle empty __S special.

2000-01-03  Andreas Jaeger  <aj@suse.de>

* string/tester.c (test_strsep): Add one more test.

2000-01-03  Philip Blundell  <philb@gnu.org>

* string/tester.c (test_mempcpy): New function.
(main): Call it.
(test_memcpy): Test unaligned cases too.

* sysdeps/arm/bits/string.h (_HAVE_STRING_ARCH_mempcpy): Define.

* sysdeps/arm/fpu/bits/mathdef.h: New file.

* nss/Makefile: Add rules to build makedb.

ChangeLog
include/resolv.h
nss/Makefile
posix/tst-mmap.c
string/bits/string2.h
string/tester.c
sysdeps/arm/bits/string.h
sysdeps/arm/fpu/bits/mathdef.h [new file with mode: 0644]
time/tst-strptime.c

index fee7a5e..16e8f89 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,31 @@
+2000-01-03  Andreas Jaeger  <aj@suse.de>
+
+       * include/resolv.h: Remove declarations for __ns_name_ntop and
+       __ns_name_unpack since those are available in resolv/arpa/nameser.h.
+
+2000-01-03  Andreas Jaeger  <aj@suse.de>
+
+       * time/tst-strptime.c (test_tm): Add tests for all fields of
+       struct tm.
+
+2000-01-03  Ulrich Drepper  <drepper@cygnus.com>
+
+       * string/bits/string2.h (__strsep_g): Don't handle empty __S special.
+
+2000-01-03  Andreas Jaeger  <aj@suse.de>
+
+       * string/tester.c (test_strsep): Add one more test.
+
+2000-01-03  Philip Blundell  <philb@gnu.org>
+
+       * string/tester.c (test_mempcpy): New function.
+       (main): Call it.
+       (test_memcpy): Test unaligned cases too.
+
+       * sysdeps/arm/bits/string.h (_HAVE_STRING_ARCH_mempcpy): Define.
+
+       * sysdeps/arm/fpu/bits/mathdef.h: New file.
+
 2000-01-02  Ulrich Drepper  <drepper@cygnus.com>
 
        * posix/Makefile (tests): Add tst-mmap.
@@ -34,6 +62,7 @@
        typos (__ASSUME_TRUNCATE64_SYSCALL -> __ASSUME_MMAP2_SYSCALL).
        Reported by Philip Blundell <Philip.Blundell@pobox.com>.
 
+       * nss/Makefile: Add rules to build makedb.
        * nss/nss_db/nss_db.h: Add definitions needed for makedb.
        * nss/nss_db/dummy-db.h: Likewise.
        * nss/makedb.c: New file.  Copied from file in db2, modified to not
index cf4f375..95b9eeb 100644 (file)
@@ -1,7 +1 @@
 #include <resolv/resolv.h>
-
-/* Internal interfaces.  */
-
-extern int __ns_name_ntop (const u_char *, char *, size_t);
-extern int __ns_name_unpack (const u_char *, const u_char *,
-                            const u_char *, u_char *, size_t);
index 685047f..e481446 100644 (file)
@@ -36,8 +36,8 @@ routines              = nsswitch $(addsuffix -lookup,$(databases))
 databases              = proto service hosts network grp pwd rpc ethers \
                          spwd netgrp key alias
 
-others                  := getent
-install-bin             := getent
+others                  := getent makedb
+install-bin             := getent makedb
 
 tests                  = test-netdb
 
@@ -72,6 +72,8 @@ generated             += $(filter-out db-alias.c db-netgrp.c, \
 distribute             += db-XXX.c nss_db.h dummy-db.h
 
 
+$(objpfx)makedb: $(libdl)
+
 # Build static module if requested
 ifneq ($(build-static-nss),yes)
 libnss_files-inhibit-o = $(filter-out .os,$(object-suffixes))
index 0332828..7a57366 100644 (file)
@@ -36,6 +36,7 @@ main (void)
        printf ("`fwrite' failed: %m\n");
        return 1;
       }
+  fflush (fp);
   assert (ps + 1000 < c * sizeof (buf));
 
   /* First try something which is not allowed: map at an offset which is
index 336aafe..db6ba97 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-independant string function optimizations.
-   Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -1165,7 +1165,7 @@ __STRING_INLINE char *
 __strsep_g (char **__s, __const char *__reject)
 {
   register char *__retval = *__s;
-  if (__retval == NULL || *__retval == '\0')
+  if (__retval == NULL)
     return NULL;
   if ((*__s = strpbrk (__retval, __reject)) != NULL)
     *(*__s)++ = '\0';
index d9043e0..ebb65ce 100644 (file)
@@ -1,5 +1,5 @@
 /* Tester for string functions.
-   Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -928,6 +928,13 @@ test_strsep (void)
   equal(ptr, "", 83);
   check(ptr == one, 84);
   check(cp == NULL, 85);
+
+  *one = '\0';                         /* Empty string and no token. */
+  cp = one;
+  ptr = strsep(&cp, "");
+  equal(ptr, "", 86);
+  check(ptr == one , 87);
+  check(cp == NULL, 88);
 }
 
 void
@@ -990,6 +997,7 @@ test_memchr (void)
 void
 test_memcpy (void)
 {
+  int i;
   it = "memcpy";
   check(memcpy(one, "abc", 4) == one, 1);      /* Returned value. */
   equal(one, "abc", 2);                        /* Did the copy go right? */
@@ -1007,6 +1015,57 @@ test_memcpy (void)
   (void) memcpy(two, one, 9);
   equal(two, "hi there", 5);           /* Just paranoia. */
   equal(one, "hi there", 6);           /* Stomped on source? */
+
+  for (i = 0; i < 16; i++)
+    {
+      const char *x = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
+      strcpy (one, x);
+      check (memcpy (one + i, "hi there", 9) == one + i,
+            7 + (i * 6));              /* Unaligned destination. */
+      check (memcmp (one, x, i) == 0, 8 + (i * 6));  /* Wrote under? */
+      equal (one + i, "hi there", 9 + (i * 6));
+      check (one[i + 9] == 'x', 10 + (i * 6));       /* Wrote over? */
+      check (memcpy (two, one + i, 9) == two,
+            11 + (i * 6));             /* Unaligned source. */
+      equal (two, "hi there", 12 + (i * 6));
+    }
+}
+
+void
+test_mempcpy (void)
+{
+  int i;
+  it = "mempcpy";
+  check(mempcpy(one, "abc", 4) == one + 4, 1); /* Returned value. */
+  equal(one, "abc", 2);                        /* Did the copy go right? */
+
+  (void) strcpy(one, "abcdefgh");
+  (void) mempcpy(one+1, "xyz", 2);
+  equal(one, "axydefgh", 3);           /* Basic test. */
+
+  (void) strcpy(one, "abc");
+  (void) mempcpy(one, "xyz", 0);
+  equal(one, "abc", 4);                        /* Zero-length copy. */
+
+  (void) strcpy(one, "hi there");
+  (void) strcpy(two, "foo");
+  (void) mempcpy(two, one, 9);
+  equal(two, "hi there", 5);           /* Just paranoia. */
+  equal(one, "hi there", 6);           /* Stomped on source? */
+
+  for (i = 0; i < 16; i++)
+    {
+      const char *x = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
+      strcpy (one, x);
+      check (mempcpy (one + i, "hi there", 9) == one + i + 9,
+            7 + (i * 6));              /* Unaligned destination. */
+      check (memcmp (one, x, i) == 0, 8 + (i * 6));  /* Wrote under? */
+      equal (one + i, "hi there", 9 + (i * 6));
+      check (one[i + 9] == 'x', 10 + (i * 6));       /* Wrote over? */
+      check (mempcpy (two, one + i, 9) == two + 9,
+            11 + (i * 6));             /* Unaligned source. */
+      equal (two, "hi there", 12 + (i * 6));
+    }
 }
 
 void
@@ -1295,6 +1354,9 @@ main (void)
   /* memmove - must work on overlap.  */
   test_memmove ();
 
+  /* mempcpy */
+  test_mempcpy ();
+
   /* memccpy.  */
   test_memccpy ();
 
index 4ca2e30..094f901 100644 (file)
@@ -1,5 +1,5 @@
 /* Optimized, inlined string functions.  ARM version.
-   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #endif
 
 /* We must defeat the generic optimized versions of these functions in
-   <bits/string2.h> since they don't work on the ARM.  */
+   <bits/string2.h> since they don't work on the ARM.  This is because
+   the games they play with the __STRING2_COPY_ARR# structures fail
+   when structs are always 32-bit aligned.
+   XXX Should provide suitably optimal replacements.  */
 #define _HAVE_STRING_ARCH_strcpy 1
 #define _HAVE_STRING_ARCH_stpcpy 1
+#define _HAVE_STRING_ARCH_mempcpy 1
diff --git a/sysdeps/arm/fpu/bits/mathdef.h b/sysdeps/arm/fpu/bits/mathdef.h
new file mode 100644 (file)
index 0000000..cb0c348
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#if !defined _MATH_H && !defined _COMPLEX_H
+# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+#endif
+
+#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
+# define _MATH_H_MATHDEF       1
+
+/* GCC does not promote `float' values to `double'.  */
+typedef float float_t;         /* `float' expressions are evaluated as
+                                  `float'.  */
+typedef double double_t;       /* `double' expressions are evaluated as
+                                  `double'.  */
+
+/* Signal that types stay as they were declared.  */
+# define FLT_EVAL_METHOD       0
+
+/* Define `INFINITY' as value of type `float'.  */
+# define INFINITY      HUGE_VALF
+
+
+/* The values returned by `ilogb' for 0 and NaN respectively.  */
+# define FP_ILOGB0     0x80000001
+# define FP_ILOGBNAN   0x7fffffff
+
+/* Number of decimal digits for the `double' type.  */
+# define DECIMAL_DIG   15
+
+#endif /* ISO C99 */
+
+#ifndef __NO_LONG_DOUBLE_MATH
+/* Signal that we do not really have a `long double'.  This disables the
+   declaration of all the `long double' function variants.  */
+/* XXX The FPA does support this but the patterns in GCC are currently
+   turned off.  */
+# define __NO_LONG_DOUBLE_MATH 1
+#endif
index f92cb0c..142c689 100644 (file)
@@ -1,5 +1,5 @@
 /* Test for strptime.
-   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -38,6 +38,69 @@ static const struct
 };
 
 
+static const struct
+{
+  const char *input;
+  const char *format;
+  const char *output;
+  int wday;
+  int yday;
+} tm_tests [] =
+{
+  {"17410105012000", "%H%M%S%d%m%Y", "2000-01-05 17:41:01", 3, 4}
+};
+
+
+
+static int
+test_tm (void)
+{
+  struct tm tm;
+  int i;
+  int result = 0;
+  char buf[100];
+
+  for (i = 0; i < sizeof (tm_tests) / sizeof (tm_tests[0]); ++i)
+    {
+      memset (&tm, '\0', sizeof (tm));
+
+      if (*strptime (tm_tests[i].input, tm_tests[i].format, &tm) != '\0')
+       {
+         printf ("not all of `%s' read\n", tm_tests[i].input);
+         result = 1;
+       }
+      strftime (buf, sizeof (buf), "%F %T", &tm);
+      printf ("strptime (\"%s\", \"%s\", ...)\n"
+             "\tshould be: %s, wday = %d, yday = %3d\n"
+             "\t       is: %s, wday = %d, yday = %3d\n",
+             tm_tests[i].input, tm_tests[i].format,
+             tm_tests[i].output,
+             tm_tests[i].wday, tm_tests[i].yday,
+             buf, tm.tm_wday, tm.tm_yday);
+
+      if (strcmp (buf, tm_tests[i].output) != 0)
+       {
+         printf ("Time and date are not correct.\n");
+         result = 1;
+       }
+      if (tm.tm_wday != tm_tests[i].wday)
+       {
+         printf ("weekday for `%s' incorrect: %d instead of %d\n",
+                 tm_tests[i].input, tm.tm_wday, tm_tests[i].wday);
+         result = 1;
+       }
+      if (tm.tm_yday != tm_tests[i].yday)
+       {
+         printf ("yearday for `%s' incorrect: %d instead of %d\n",
+                 tm_tests[i].input, tm.tm_yday, tm_tests[i].yday);
+         result = 1;
+       }
+    }
+
+  return result;
+}
+
+
 int
 main (int argc, char *argv[])
 {
@@ -76,5 +139,7 @@ main (int argc, char *argv[])
        }
     }
 
+  result |= test_tm ();
+
   return result;
 }