Sun May 26 15:15:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
authorRoland McGrath <roland@gnu.org>
Sun, 26 May 1996 19:19:51 +0000 (19:19 +0000)
committerRoland McGrath <roland@gnu.org>
Sun, 26 May 1996 19:19:51 +0000 (19:19 +0000)
* stdlib/ldiv.c: Deansideclized.

Sun May 26 19:39:53 1996  Ulrich Drepper  <drepper@cygnus.com>

* intl/loadmsgcat.c (_nl_load_domain): Test correct variable
after malloc.

* string/Makefile (tester-ENV): New variable to suppress message
  translation in test.

* string/tester.c: Add tests for strtok_r and strsep.

* sysdeps/i386/i486/strcat.S: Correct some more 8bit operation
<-> 32 bit operand conflicts.

* sysdeps/i386/strsep.S: Wrapper around <sysdeps/i386/strtok.S>
to produce strsep function.
* sysdeps/i386/strtok.S: Optimized implementation of strtok
function.
* sysdeps/i386/strtok_r.S: Wrapper around <sysdeps/i386/strtok.S>
to produce strtok_r function.

* sysdeps/generic/strtok.c: Moved here from string/strtok.c.
Corrected example in comment.

* string/Makefile (routines): Add strtok_r.
* sysdeps/generic/strtok_r.c: New file.  Implement reentrant version
of strtok_r.
* string/string.h: Add prototype for strtok_r.
* wcsmbs/wcstok.c: Handle illegal SAVE_PTR argument the same
as in strtok_r.

Sun May 26 13:28:23 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

* time/tzset.c (__tzset): Ignore leading : in $TZ; always try tzfile
first and fall back to 1003.1 syntax only if it fails.

* time/Makefile (install-others): Also install posix/ZONE and
right/ZONE for each ZONE in $(zonenames).
(z.% rule): Generate rules for right/ZONE and posix/ZONE targets too,
the difference begin leapseconds vs /dev/null as 3rd dep.  For
original ZONE targets use $(leapseconds), to be set in Makeconfig.
(target-zone-flavor): New variable.
(tzcompile): Use it to get the right -d for posix/ and right/ flavors.
* Makeconfig (leapseconds): New variable.

* mach/Machrules (%.udeps rule): Depend on Machrules.
Emit deps for .uh and .__h files.
(%.uh, %.__h rules): Don't depend on %.defs; use #include <$*.defs>
instead.

Sun May 26 01:06:47 1996  Ulrich Drepper  <drepper@cygnus.com>

* stdlib/Makefile (routines): Add llabs, lldiv.
* stdlib/llabs.c: New file.  Implementation of return
absolute value of long long argument.
* stdlib/lldiv.c: New file.  Implementation of division with remainder
of long long argument.
* stdlib/stdlib.h [__USE_GNU] (lldiv_t): New type for lldiv
function.
Define prototypes for lldiv and llabs functions.

* locale/C-collate.c: Initialize _NL_COLLATE_NRULES element.

* stdlib/strtod.c: Replace wchar_t with wint_t.  The later is
really the type for a single wide character.

* string/strxfrm.c (print_val): Define separate version for
use as wcsxfrm.  Here we don't need UTF8 encoding.

* wcsmbs/wchar.h:  gcc-2.7.2-960517 finally introduces wint_t
in <stddef.h>.  Use this value and only for older gcc version
define in place.
(uwchar_t): Remove definition.

* wcsmbs/wcscmp.c, wcsmbs/wcscoll.c, wcsmbs/wcsncmp.c,
wcsmbs/wcsxfrm.c, wcsmbs/wmemcmp.c: : Don't use uwchar_t as unsigned
type.  wint_t is intended for this.

Sat May 25 14:10:19 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

* sysdeps/unix/bsd/direntry.h: Use [1] instead of [0] for d_name to
quiet -ansi -pedantic.
* sysdeps/unix/common/direntry.h: Likewise.

* login/Makefile (headers): Add lastlog.h.
* login/lastlog.h: New file.

* login/Makefile (CFLAGS): Don't append -D_THREAD_SAFE.
* login/utmp.h [_REENTRANT || _THREAD_SAFE]: Replace this conditional
with #ifdef __USE_REENTRANT.

* features.h (__GNU_LIBRARY__): Set to 6.
[_GNU_SOURCE] (_POSIX_SOURCE, _POSIX_C_SOURCE, _BSD_SOURCE,
_SVID_SOURCE): Make sure they are all defined.

* sysdeps/unix/sysv/linux/gnu/types.h: Instead of including
<linux/posix_types.h>, define _LINUX_TYPES_DONT_EXPORT and then
include <linux/types.h>.

* resource/sys/resource.h: Remove trailing commas from enums.

* sysdeps/generic/netinet/in.h: Remove trailing commas from enums.
* sysdeps/unix/sysv/linux/netinet/in.h: Likewise.

41 files changed:
ChangeLog
Makeconfig
config.guess
features.h
intl/loadmsgcat.c
locale/C-collate.c
login/Makefile
login/lastlog.h [new file with mode: 0644]
login/utmp.h
mach/Machrules
resource/sys/resource.h
stdlib/Makefile
stdlib/llabs.c [new file with mode: 0644]
stdlib/lldiv.c [new file with mode: 0644]
stdlib/stdlib.h
stdlib/strtod.c
string/Makefile
string/string.h
string/strtok.c
string/strxfrm.c
string/tester.c
sysdeps/generic/netinet/in.h
sysdeps/generic/strtok.c [new file with mode: 0644]
sysdeps/generic/strtok_r.c [new file with mode: 0644]
sysdeps/i386/i486/strcat.S
sysdeps/i386/strsep.S [new file with mode: 0644]
sysdeps/i386/strtok.S [new file with mode: 0644]
sysdeps/i386/strtok_r.S [new file with mode: 0644]
sysdeps/unix/bsd/direntry.h
sysdeps/unix/common/direntry.h
sysdeps/unix/sysv/linux/gnu/types.h
sysdeps/unix/sysv/linux/netinet/in.h
time/Makefile
time/tzset.c
wcsmbs/wchar.h
wcsmbs/wcscmp.c
wcsmbs/wcscoll.c
wcsmbs/wcsncmp.c
wcsmbs/wcstok.c
wcsmbs/wcsxfrm.c
wcsmbs/wmemcmp.c

index 8aa5f1f171aeeae9863e3c2f7bc598cad2749e8d..99b53b65f078ec84d7e0e3d620971656909a61d4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,112 @@
+Sun May 26 15:15:08 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+       * stdlib/ldiv.c: Deansideclized.
+
+Sun May 26 19:39:53 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intl/loadmsgcat.c (_nl_load_domain): Test correct variable
+       after malloc.
+
+       * string/Makefile (tester-ENV): New variable to suppress message
+       translation in test.
+
+       * string/tester.c: Add tests for strtok_r and strsep.
+
+       * sysdeps/i386/i486/strcat.S: Correct some more 8bit operation
+       <-> 32 bit operand conflicts.
+
+       * sysdeps/i386/strsep.S: Wrapper around <sysdeps/i386/strtok.S>
+       to produce strsep function.
+       * sysdeps/i386/strtok.S: Optimized implementation of strtok
+       function.
+       * sysdeps/i386/strtok_r.S: Wrapper around <sysdeps/i386/strtok.S>
+       to produce strtok_r function.
+
+       * sysdeps/generic/strtok.c: Moved here from string/strtok.c.
+       Corrected example in comment.
+
+       * string/Makefile (routines): Add strtok_r.
+       * sysdeps/generic/strtok_r.c: New file.  Implement reentrant version
+       of strtok_r.
+       * string/string.h: Add prototype for strtok_r.
+       * wcsmbs/wcstok.c: Handle illegal SAVE_PTR argument the same
+       as in strtok_r.
+
+Sun May 26 13:28:23 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+       * time/tzset.c (__tzset): Ignore leading : in $TZ; always try tzfile
+       first and fall back to 1003.1 syntax only if it fails.
+
+       * time/Makefile (install-others): Also install posix/ZONE and
+       right/ZONE for each ZONE in $(zonenames).
+       (z.% rule): Generate rules for right/ZONE and posix/ZONE targets too,
+       the difference begin leapseconds vs /dev/null as 3rd dep.  For
+       original ZONE targets use $(leapseconds), to be set in Makeconfig.
+       (target-zone-flavor): New variable.
+       (tzcompile): Use it to get the right -d for posix/ and right/ flavors.
+       * Makeconfig (leapseconds): New variable.
+
+       * mach/Machrules (%.udeps rule): Depend on Machrules.
+       Emit deps for .uh and .__h files.
+       (%.uh, %.__h rules): Don't depend on %.defs; use #include <$*.defs>
+       instead.
+
+Sun May 26 01:06:47 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * stdlib/Makefile (routines): Add llabs, lldiv.
+       * stdlib/llabs.c: New file.  Implementation of return
+       absolute value of long long argument.
+       * stdlib/lldiv.c: New file.  Implementation of division with remainder
+       of long long argument.
+       * stdlib/stdlib.h [__USE_GNU] (lldiv_t): New type for lldiv
+       function.
+       Define prototypes for lldiv and llabs functions.
+
+       * locale/C-collate.c: Initialize _NL_COLLATE_NRULES element.
+
+       * stdlib/strtod.c: Replace wchar_t with wint_t.  The later is
+       really the type for a single wide character.
+
+       * string/strxfrm.c (print_val): Define separate version for
+       use as wcsxfrm.  Here we don't need UTF8 encoding.
+
+       * wcsmbs/wchar.h:  gcc-2.7.2-960517 finally introduces wint_t
+       in <stddef.h>.  Use this value and only for older gcc version
+       define in place.
+       (uwchar_t): Remove definition.
+
+       * wcsmbs/wcscmp.c, wcsmbs/wcscoll.c, wcsmbs/wcsncmp.c,
+       wcsmbs/wcsxfrm.c, wcsmbs/wmemcmp.c: : Don't use uwchar_t as unsigned
+       type.  wint_t is intended for this.
+
+Sat May 25 14:10:19 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+       * sysdeps/unix/bsd/direntry.h: Use [1] instead of [0] for d_name to
+       quiet -ansi -pedantic.
+       * sysdeps/unix/common/direntry.h: Likewise.
+
+       * login/Makefile (headers): Add lastlog.h.
+       * login/lastlog.h: New file.
+
+       * login/Makefile (CFLAGS): Don't append -D_THREAD_SAFE.
+       * login/utmp.h [_REENTRANT || _THREAD_SAFE]: Replace this conditional
+       with #ifdef __USE_REENTRANT.
+
+       * features.h (__GNU_LIBRARY__): Set to 6.
+       [_GNU_SOURCE] (_POSIX_SOURCE, _POSIX_C_SOURCE, _BSD_SOURCE,
+       _SVID_SOURCE): Make sure they are all defined.
+
+       * sysdeps/unix/sysv/linux/gnu/types.h: Instead of including
+       <linux/posix_types.h>, define _LINUX_TYPES_DONT_EXPORT and then
+       include <linux/types.h>.
+
+       * resource/sys/resource.h: Remove trailing commas from enums.
+
 Fri May 24 17:30:50 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
 
+       * sysdeps/generic/netinet/in.h: Remove trailing commas from enums.
+       * sysdeps/unix/sysv/linux/netinet/in.h: Likewise.
+
        * login/getutline_r.c: Include string.h.
 
        * Rules (static-only-routines): Restore the rule to make these .so's
index d871789e28180e3a0b6372805db05c1c58c82d6e..d2bbbb25177a3e8d5368ec34d366dc0bf2af94b4 100644 (file)
@@ -221,6 +221,16 @@ ifndef localtime-file
 localtime-file = $(sysconfdir)/localtime
 endif
 
+# What to use for leap second specifications in compiling the default
+# timezone files.  Set this to `/dev/null' for no leap second handling as
+# 1003.1 requires, or to `leapseconds' for proper leap second handling.
+# Both zone flavors are always available as `posix/ZONE' and `right/ZONE'.
+# This variable determines the default: if it's `/dev/null',
+# ZONE==posix/ZONE; if it's `leapseconds', ZONE==right/ZONE.
+ifndef leapseconds
+leapseconds = /dev/null
+endif
+
 # What timezone's DST rules should be used when a POSIX-style TZ
 # environment variable doesn't specify any rules.  For 1003.1 compliance
 # this timezone must use rules that are as U.S. federal law defines DST.
index d8c24708afe6a6611c18f41103b1ef4693193f67..ab53d1463385dcdd0562a359b5bbdc991f0c33d0 100755 (executable)
@@ -137,7 +137,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     AViiON:dgux:*:*)
         # DG/UX returns AViiON for all architectures
         UNAME_PROCESSOR=`/usr/bin/uname -p`
-        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88100 ] ; then
+        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
        if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
             -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
                echo m88k-dg-dgux${UNAME_RELEASE}
@@ -211,7 +211,7 @@ EOF
        echo romp-ibm-bsd4.4
        exit 0 ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to 
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
        exit 0 ;;                           # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
        echo rs6000-bull-bosx
index de1fe008a29284c6fd3473f5eb038a5d3f3d3fcb..4b50bea75aa45963d8d51d8983c1531dd301030c 100644 (file)
@@ -50,7 +50,6 @@ Cambridge, MA 02139, USA.  */
 
    The macro `__GNU_LIBRARY__' is defined by this file unconditionally.
 
-   All macros defined by this file are defined as 1.
    All macros listed above as possibly being defined by this file are
    explicitly undefined if they are not explicitly defined.
    Feature-test macros that are not defined by the user or compiler
@@ -80,32 +79,42 @@ Cambridge, MA 02139, USA.  */
 #define        __FAVOR_BSD     1
 #endif
 
+/* If _GNU_SOURCE was defined by the user, turn on all the other features.  */
+#ifdef _GNU_SOURCE
+/* If the user specifies some of the following without _GNU_SOURCE,
+   they are mutually exclusive.  But they all default below to on,
+   so undefine them to get all the features turned on for _GNU_SOURCE.  */
+#undef _POSIX_SOURCE
+#undef _POSIX_C_SOURCE
+#undef _BSD_SOURCE
+#undef _SVID_SOURCE
+#endif
 
 /* If nothing (other than _GNU_SOURCE) is defined,
    define _BSD_SOURCE and _SVID_SOURCE.  */
-#if (!defined(__STRICT_ANSI__) && !defined(_POSIX_SOURCE) && \
-     !defined(_POSIX_C_SOURCE) && !defined(_BSD_SOURCE) && \
-     !defined(_SVID_SOURCE))
+#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE) && \
+     !defined (_POSIX_C_SOURCE) && !defined (_BSD_SOURCE) && \
+     !defined (_SVID_SOURCE))
 #define        _BSD_SOURCE     1
 #define        _SVID_SOURCE    1
 #endif
 
 /* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2.  */
-#if (!defined(__STRICT_ANSI__) && !defined(_POSIX_SOURCE) && \
-     !defined(_POSIX_C_SOURCE))
+#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE) && \
+     !defined (_POSIX_C_SOURCE))
 #define        _POSIX_SOURCE   1
 #define        _POSIX_C_SOURCE 2
 #endif
 
-#if    defined(_POSIX_SOURCE) || _POSIX_C_SOURCE >= 1
+#if    defined (_POSIX_SOURCE) || _POSIX_C_SOURCE >= 1
 #define        __USE_POSIX     1
 #endif
 
-#if    defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 2
+#if    defined (_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 2
 #define        __USE_POSIX2    1
 #endif
 
-#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE)
+#if defined (_BSD_SOURCE) || defined (_SVID_SOURCE)
 #define        __USE_MISC      1
 #endif
 
@@ -133,10 +142,10 @@ Cambridge, MA 02139, USA.  */
    the shared C library corresponding to this set of header files.  */
 
 #undef __GNU_LIBRARY__
-#define        __GNU_LIBRARY__ 5
+#define        __GNU_LIBRARY__ 6
 
 
-#if    !defined(__GNUC__) || __GNUC__ < 2
+#if    !defined (__GNUC__) || __GNUC__ < 2
 /* In GCC version 2, (__extension__ EXPR) will not complain
    about GCC extensions used in EXPR under -ansi or -pedantic.  */
 #define        __extension__
index 1daf72a09fb3aac0c02d12851ee51da5f97d1812..90eed87fd91ac04c1a853dae77f749f3ce7aa2f7 100644 (file)
@@ -161,7 +161,7 @@ _nl_load_domain (domain_file)
 
   domain_file->data
     = (struct loaded_domain *) malloc (sizeof (struct loaded_domain *));
-  if (domain->data == NULL)
+  if (domain_file->data == NULL)
     return;
 
   domain = (struct loaded_domain *) domain_file->data;
index 3b89e4fbe83cf1bb5b7c2094c6244c57113733bf..9535d4faa1ca3da66a7672c205410424fe6d3a18 100644 (file)
@@ -23,5 +23,8 @@ const struct locale_data _nl_C_LC_COLLATE =
 {
   _nl_C_name,
   NULL, 0, /* no file mapped */
-  0,
+  1,
+  {
+    { word: 0 }
+  }
 };
index d3e6ac8aa520674d347cca986f1e65a14c1ae945..99687433a0db629a7efc1584114125ad4cc2387f 100644 (file)
@@ -22,7 +22,7 @@
 
 subdir := login
 
-headers        := utmp.h utmpbits.h
+headers        := utmp.h utmpbits.h lastlog.h
 
 routines := setutent endutent getutent getutid getutline pututline     \
            setutent_r endutent_r getutent_r getutid_r getutline_r      \
@@ -34,5 +34,3 @@ libutil-routines:= login login_tty logout logwtmp pty
 
 
 include ../Rules
-
-override CFLAGS += -D_THREAD_SAFE
diff --git a/login/lastlog.h b/login/lastlog.h
new file mode 100644 (file)
index 0000000..f2443eb
--- /dev/null
@@ -0,0 +1,4 @@
+/* This header file is used in 4.3BSD to define `struct lastlog',
+   which we define in <utmpbits.h>.  */
+
+#include <utmp.h>
index 2ba3da8e0bf549b2f65736530fffc8718246542e..b53e13a9e079535ab8bb697922f4b1f3032f49d4 100644 (file)
@@ -62,7 +62,7 @@ extern struct utmp *getutline __P ((__const struct utmp *__line));
 extern struct utmp *pututline __P ((__const struct utmp *__utmp_ptr));
 
 
-#if defined(_REENTRANT) || defined(_THREAD_SAFE)
+#ifdef __USE_REENTRANT
 /* Define the data structure needed for the reentrent version.  */
 struct utmp_data
 {
@@ -89,7 +89,7 @@ extern int getutline_r __P ((__const struct utmp *__line, struct utmp **__utmp,
 extern int pututline_r __P ((__const struct utmp *__utmp_ptr,
                             struct utmp_data *__utmp_data));
 
-#endif /* _REENTRENT || _THREAD_SAFE */
+#endif /* Use reentrant.  */
 
 __END_DECLS
 
index 6f1c1948c5809a6652800dee579c282e9eb93d1e..bc0ee3783b3a4b433484851053c300044fe3f136 100644 (file)
@@ -115,11 +115,12 @@ $(patsubst %,$(objpfx)%.ustamp,$(user-interfaces)): $(objpfx)%.ustamp:
        done
        touch $@
 -include $(patsubst %,$(objpfx)%.udeps,$(user-interfaces))
-$(patsubst %,$(objpfx)%.udeps,$(user-interfaces)): $(objpfx)%.udeps:
+$(patsubst %,$(objpfx)%.udeps,$(user-interfaces)):
+  $(objpfx)%.udeps: $(..)mach/Machrules
        $(make-target-directory)
        echo '#include <$*.defs>' | \
        $(CC) $(CPPFLAGS) -M -x c - | \
-       sed -e 's,- *:,$@ $(@:.udeps=.ustamp) \
+       sed -e 's,- *:,$@ $(@:.udeps=.ustamp) $(@:.udeps=.uh) $(@:.udeps=.__h)\
                          $(@:.udeps=_server.c) $(@:.udeps=_server.h):,' \
            $(sed-remove-objpfx) > $@.new
        mv -f $@.new $@
@@ -137,16 +138,18 @@ $(objpfx)%_server.c $(objpfx)%_server.h:
 
 # To get header files that declare both the straight and __ functions,
 # we generate two files and paste them together.
-$(objpfx)%.uh: %.defs; $(mig.uh)
+$(objpfx)%.uh:; $(mig.uh)
 define mig.uh
 $(make-target-directory)
-$(MIG) $< $(MIGFLAGS) \
+echo '#include <$*.defs>' | \
+$(MIG) - /dev/null $(MIGFLAGS) \
        -header $@ -server /dev/null -user /dev/null
 endef
-$(objpfx)%.__h: %.defs; $(mig.__h)
+$(objpfx)%.__h:; $(mig.__h)
 define mig.__h
 $(make-target-directory)
-$(MIG) $< $(MIGFLAGS) -prefix __ \
+echo '#include <$*.defs>' | \
+$(MIG) - /dev/null $(MIGFLAGS) -prefix __ \
        -header $@ -server /dev/null -user /dev/null
 endef
 
index 9bef483359d80ddaf5b3f68c46e6235f9465c0a1..14bec34d74e152eb18095f35f403a535409d28c4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1994, 1996 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
@@ -59,7 +59,7 @@ enum __rusage_who
     RUSAGE_SELF = 0,
 #define        RUSAGE_SELF     RUSAGE_SELF
     /* All of its terminated child processes.  */
-    RUSAGE_CHILDREN = -1,
+    RUSAGE_CHILDREN = -1
 #define        RUSAGE_CHILDREN RUSAGE_CHILDREN
   };
 
@@ -134,7 +134,7 @@ enum __priority_which
   {
     PRIO_PROCESS = 0,          /* WHO is a process ID.  */
     PRIO_PGRP = 1,             /* WHO is a process group ID.  */
-    PRIO_USER = 2,             /* WHO is a user ID.  */
+    PRIO_USER = 2              /* WHO is a user ID.  */
   };
 
 /* Return the highest priority of any process specified by WHICH and WHO
index d30a0f2a0652fd4315ab668eb693b70f2e7de092..46d7aa13a542b47e915ea5923e0427485f95f98e 100644 (file)
@@ -29,8 +29,8 @@ routines      :=                                                            \
        bsearch qsort msort                                                   \
        getenv putenv setenv                                                  \
        exit on_exit atexit                                                   \
-       abs labs                                                              \
-       div ldiv                                                              \
+       abs labs llabs                                                        \
+       div ldiv lldiv                                                        \
        mblen mbstowcs mbtowc wcstombs wctomb                                 \
        random random_r rand                                                  \
        drand48 erand48 lrand48 nrand48 mrand48 jrand48                       \
diff --git a/stdlib/llabs.c b/stdlib/llabs.c
new file mode 100644 (file)
index 0000000..465028c
--- /dev/null
@@ -0,0 +1,31 @@
+/* `long long int' absolute value.
+Copyright (C) 1991, 1996 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.  */
+
+#include <stdlib.h>
+
+#undef llabs
+
+
+/* Return the absolute value of I.  */
+long long int
+llabs (i)
+     long long int i;
+{
+  return i < 0 ? -i : i;
+}
diff --git a/stdlib/lldiv.c b/stdlib/lldiv.c
new file mode 100644 (file)
index 0000000..1659e0f
--- /dev/null
@@ -0,0 +1,57 @@
+/* `long long int' divison with remainder.
+Copyright (C) 1992, 1996 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.  */
+
+#include <stdlib.h>
+
+
+/* Return the `lldiv_t' representation of NUMER over DENOM.  */
+lldiv_t
+lldiv (numer, denom)
+     long long int numer;
+     long long int denom;
+{
+  lldiv_t result;
+
+  result.quot = numer / denom;
+  result.rem = numer % denom;
+
+  /* The ANSI standard says that |QUOT| <= |NUMER / DENOM|, where
+     NUMER / DENOM is to be computed in infinite precision.  In
+     other words, we should always truncate the quotient towards
+     zero, never -infinity.  Machine division and remainer may
+     work either way when one or both of NUMER or DENOM is
+     negative.  If only one is negative and QUOT has been
+     truncated towards -infinity, REM will have the same sign as
+     DENOM and the opposite sign of NUMER; if both are negative
+     and QUOT has been truncated towards -infinity, REM will be
+     positive (will have the opposite sign of NUMER).  These are
+     considered `wrong'.  If both are NUM and DENOM are positive,
+     RESULT will always be positive.  This all boils down to: if
+     NUMER >= 0, but REM < 0, we got the wrong answer.  In that
+     case, to get the right answer, add 1 to QUOT and subtract
+     DENOM from REM.  */
+
+  if (numer >= 0 && result.rem < 0)
+    {
+      ++result.quot;
+      result.rem -= denom;
+    }
+
+  return result;
+}
index 1853c5babb9ab07d2dd49ed61a89215f143c8489..97b257248ee642ad66c56ef933dd5052891e3c16 100644 (file)
@@ -50,6 +50,15 @@ typedef struct
     long int rem;              /* Remainder.  */
   } ldiv_t;
 
+#ifdef __USE_GNU
+/* Returned by `lldiv'.  */
+typedef struct
+  {
+    long long int quot;                /* Quotient.  */
+    long long int rem;         /* Remainder.  */
+  } lldiv_t;
+#endif
+
 
 /* The largest number rand will return (same as INT_MAX).  */
 #define        RAND_MAX        2147483647
@@ -407,13 +416,19 @@ extern void qsort __P ((__ptr_t __base, size_t __nmemb, size_t __size,
 /* Return the absolute value of X.  */
 extern int abs __P ((int __x)) __attribute__ ((__const__));
 extern long int labs __P ((long int __x)) __attribute__ ((__const__));
+#ifdef __USE_GNU
+extern long long int llabs __P ((long long int __x)) __attribute__ ((__const__));
+#endif
 
 
-/* Return the `div_t' or `ldiv_t' representation
+/* Return the `div_t', `ldiv_t' or `lldiv_t' representation
    of the value of NUMER over DENOM. */
 /* GCC may have built-ins for these someday.  */
 extern div_t div __P ((int __numer, int __denom)) __attribute__ ((__const__));
 extern ldiv_t ldiv __P ((long int __numer, long int __denom)) __attribute__ ((__const__));
+#ifdef __USE_GNU
+extern lldiv_t lldiv __P ((long long int __numer, long long int __denom)) __attribute__ ((__const__));
+#endif
 
 
 #ifdef __USE_SVID
index 525a6f98a9d3dbec429764590b3ef9fcb94f8511..03a37bfb70057e89149cc70879cfaf816e4e4a4e 100644 (file)
@@ -365,9 +365,9 @@ INTERNAL (STRTOF) (nptr, endptr, group)
   CHAR_TYPE c;
 
   /* The radix character of the current locale.  */
-  wchar_t decimal;
+  wint_t decimal;
   /* The thousands character of the current locale.  */
-  wchar_t thousands;
+  wint_t thousands;
   /* The numeric grouping specification of the current locale,
      in the format described in <locale.h>.  */
   const char *grouping;
@@ -380,9 +380,10 @@ INTERNAL (STRTOF) (nptr, endptr, group)
       else
        {
          /* Figure out the thousands separator character.  */
-         if (mbtowc (&thousands, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
+         if (mbtowc ((wchar_t *) &thousands,
+                     _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
                      strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0)
-           thousands = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
+           thousands = (wint_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
          if (thousands == L'\0')
            grouping = NULL;
        }
@@ -394,9 +395,9 @@ INTERNAL (STRTOF) (nptr, endptr, group)
     }
 
   /* Find the locale's decimal point character.  */
-  if (mbtowc (&decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
+  if (mbtowc ((wchar_t *) &decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
              strlen (_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT))) <= 0)
-    decimal = (wchar_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
+    decimal = (wint_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
 
 
   /* Prepare number representation.  */
index af371ed689a0f12ab2e623dbbf333905302a845e..02137316bffa1cfe107d14378779676b22c08660 100644 (file)
@@ -28,7 +28,7 @@ routines      := strcat strchr strcmp strcoll strcpy strcspn strdup   \
                   strerror _strerror strlen strnlen                    \
                   strncat strncmp strncpy                              \
                   strrchr strpbrk strsignal strspn strstr strtok       \
-                  strxfrm memchr memcmp memmove memset                 \
+                  strtok_r strxfrm memchr memcmp memmove memset        \
                   bcopy bzero ffs stpcpy stpncpy                       \
                   strcasecmp strncase                                  \
                   memccpy memcpy wordcopy strsep                       \
@@ -42,3 +42,5 @@ distribute    := memcopy.h pagecopy.h
 
 
 include ../Rules
+
+tester-ENV = LANGUAGE=C
index 5443d5009e11f23890bc965efa3af7a4bba6fd87..0df63d0653c3ef1f0c23056369dcd17cfe346929 100644 (file)
@@ -120,6 +120,11 @@ extern char *strstr __P ((__const char *__haystack, __const char *__needle));
 extern char *strtok __P ((char *__s, __const char *__delim));
 
 #ifdef __USE_GNU
+/* Divide S into tokens separated by characters in DELIM.  Information
+   passed between calls are stored in SAVE_PTR.  */
+extern char *strtok_r __P ((char *__s, __const char *__delim,
+                           char **__save_ptr));
+
 /* Find the first occurence of NEEDLE in HAYSTACK.
    NEEDLE is NEEDLELEN bytes long;
    HAYSTACK is HAYSTACKLEN bytes long.  */
index 0b95084f534f47b5c79103373cd0313a4fb3c396..954471322b6d21b06c49db37b09a15cbdb96a9ea 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996 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
@@ -13,10 +13,9 @@ 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
 
-#include <ansidecl.h>
 #include <errno.h>
 #include <string.h>
 
@@ -26,15 +25,16 @@ static char *olds = NULL;
 /* Parse S into tokens separated by characters in DELIM.
    If S is NULL, the last string strtok() was called with is
    used.  For example:
-       char s[] = "-abc=-def";
+       char s[] = "-abc-=-def";
        x = strtok(s, "-");             // x = "abc"
-       x = strtok(NULL, "=-");         // x = "def"
+       x = strtok(NULL, "-=");         // x = "def"
        x = strtok(NULL, "=");          // x = NULL
                // s = "abc\0-def\0"
 */
 char *
-DEFUN(strtok, (s, delim),
-      register char *s AND register CONST char *delim)
+strtok (s, delim)
+     char *s;
+     const char *delim;
 {
   char *token;
 
@@ -50,7 +50,7 @@ DEFUN(strtok, (s, delim),
     }
 
   /* Scan leading delimiters.  */
-  s += strspn(s, delim);
+  s += strspn (s, delim);
   if (*s == '\0')
     {
       olds = NULL;
@@ -59,7 +59,7 @@ DEFUN(strtok, (s, delim),
 
   /* Find the end of the token.  */
   token = s;
-  s = strpbrk(token, delim);
+  s = strpbrk (token, delim);
   if (s == NULL)
     /* This token finishes the string.  */
     olds = NULL;
index 300967bc2b3741e95707676bd58bff8f13b9179a..f94c16b50bb2e43678520337bba74530d6979de7 100644 (file)
@@ -21,9 +21,10 @@ Boston, MA 02111-1307, USA.  */
 #include <stdlib.h>
 #include <string.h>
 
-#ifndef STRING_TYPE
+#ifndef WIDE_VERSION
 # define STRING_TYPE char
 # define USTRING_TYPE unsigned char
+# define L_(Ch) Ch
 # define STRXFRM strxfrm
 # define STRLEN strlen
 # define STPNCPY __stpncpy
@@ -34,9 +35,10 @@ Boston, MA 02111-1307, USA.  */
 #include "../locale/weight.h"
 
 
+#ifndef WIDE_VERSION
 /* Write 32 bit value UTF-8 encoded but only if enough space is left.  */
 static __inline size_t
-print_val (u_int32_t value, STRING_TYPE *dest, size_t max, size_t act)
+print_val (u_int32_t value, char *dest, size_t max, size_t act)
 {
   char tmp[6];
   int idx = 0;
@@ -90,6 +92,48 @@ print_val (u_int32_t value, STRING_TYPE *dest, size_t max, size_t act)
 
   return act;
 }
+#else
+static __inline size_t
+print_val (u_int32_t value, wchar_t *dest, size_t max, size_t act)
+{
+  /* We cannot really assume wchar_t is 32 bits wide.  But it is for
+     GCC and so we don't do much optimization for the other case.  */
+  if (sizeof (wchar_t) == 4)
+    {
+      if (act < max)
+       dest[act] = (wchar_t) value;
+      ++act;
+    }
+  else
+    {
+      wchar_t tmp[3];
+      size_t idx = 0;
+
+      if (value < 0x8000)
+       tmp[idx++] = (wchar_t) act;
+      else
+       {
+         tmp[idx++] = (wchar_t) (0x8000 + (value & 0x3fff));
+         value >>= 14;
+         if (value < 0x2000)
+           tmp[idx++] = (wchar_t) (0xc000 + value);
+         else
+           {
+             tmp[idx++] = (wchar_t) (0x8000 + (value & 0x3fff));
+             value >>= 14;
+             tmp[idx++] = (wchar_t) (0xe000 + value);
+           }
+       }
+      while (idx-- > 0)
+       {
+         if (act < max)
+           dest[act] = tmp[idx];
+         ++act;
+       }
+    }
+  return act;
+}
+#endif
 
 
 /* Transform SRC into a form such that the result of strcmp
@@ -184,5 +228,9 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n)
     }
 
   /* Terminate string.  */
-  return print_val (0, dest, n, written);
+  if (written < n)
+    dest[written] = L_('\0');
+
+  /* Return length without counting the terminating '\0'.  */
+  return written;
 }
index d826ff7bebd9dc5716b6749d8356de9e9568f380..1b87c9f544048ad365c5566e58f82dcd938f4847 100644 (file)
@@ -40,6 +40,8 @@ char two[50];
 int
 DEFUN(main, (argc, argv), int argc AND char **argv)
 {
+  char *cp;
+
   /* Test strcmp first because we use it to test other things.  */
   it = "strcmp";
   check(strcmp("", "") == 0, 1);               /* Trivial case. */
@@ -359,6 +361,100 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
   equal(one+2, "b", 32);
   equal(one+4, "c", 33);
 
+  /* strtok_r.  */
+  it = "strtok_r";
+  (void) strcpy(one, "first, second, third");
+  equal(strtok_r(one, ", ", &cp), "first", 1); /* Basic test. */
+  equal(one, "first", 2);
+  equal(strtok_r((char *)NULL, ", ", &cp), "second", 3);
+  equal(strtok_r((char *)NULL, ", ", &cp), "third", 4);
+  check(strtok_r((char *)NULL, ", ", &cp) == NULL, 5);
+  (void) strcpy(one, ", first, ");
+  equal(strtok_r(one, ", ", &cp), "first", 6); /* Extra delims, 1 tok. */
+  check(strtok_r((char *)NULL, ", ", &cp) == NULL, 7);
+  (void) strcpy(one, "1a, 1b; 2a, 2b");
+  equal(strtok_r(one, ", ", &cp), "1a", 8);    /* Changing delim lists. */
+  equal(strtok_r((char *)NULL, "; ", &cp), "1b", 9);
+  equal(strtok_r((char *)NULL, ", ", &cp), "2a", 10);
+  (void) strcpy(two, "x-y");
+  equal(strtok_r(two, "-", &cp), "x", 11);     /* New string before done. */
+  equal(strtok_r((char *)NULL, "-", &cp), "y", 12);
+  check(strtok_r((char *)NULL, "-", &cp) == NULL, 13);
+  (void) strcpy(one, "a,b, c,, ,d");
+  equal(strtok_r(one, ", ", &cp), "a", 14);    /* Different separators. */
+  equal(strtok_r((char *)NULL, ", ", &cp), "b", 15);
+  equal(strtok_r((char *)NULL, " ,", &cp), "c", 16);   /* Permute list too. */
+  equal(strtok_r((char *)NULL, " ,", &cp), "d", 17);
+  check(strtok_r((char *)NULL, ", ", &cp) == NULL, 18);
+  check(strtok_r((char *)NULL, ", ", &cp) == NULL, 19);        /* Persistence. */
+  (void) strcpy(one, ", ");
+  check(strtok_r(one, ", ", &cp) == NULL, 20); /* No tokens. */
+  (void) strcpy(one, "");
+  check(strtok_r(one, ", ", &cp) == NULL, 21); /* Empty string. */
+  (void) strcpy(one, "abc");
+  equal(strtok_r(one, ", ", &cp), "abc", 22);  /* No delimiters. */
+  check(strtok_r((char *)NULL, ", ", &cp) == NULL, 23);
+  (void) strcpy(one, "abc");
+  equal(strtok_r(one, "", &cp), "abc", 24);    /* Empty delimiter list. */
+  check(strtok_r((char *)NULL, "", &cp) == NULL, 25);
+  (void) strcpy(one, "abcdefgh");
+  (void) strcpy(one, "a,b,c");
+  equal(strtok_r(one, ",", &cp), "a", 26);     /* Basics again... */
+  equal(strtok_r((char *)NULL, ",", &cp), "b", 27);
+  equal(strtok_r((char *)NULL, ",", &cp), "c", 28);
+  check(strtok_r((char *)NULL, ",", &cp) == NULL, 29);
+  equal(one+6, "gh", 30);                      /* Stomped past end? */
+  equal(one, "a", 31);                 /* Stomped old tokens? */
+  equal(one+2, "b", 32);
+  equal(one+4, "c", 33);
+
+  /* strsep.  */
+  it = "strsep";
+  cp = strcpy(one, "first, second, third");
+  equal(strsep(&cp, ", "), "first", 1);        /* Basic test. */
+  equal(one, "first", 2);
+  equal(strsep(&cp, ", "), "second", 3);
+  equal(strsep(&cp, ", "), "third", 4);
+  check(strsep(&cp, ", ") == NULL, 5);
+  cp = strcpy(one, ", first, ");
+  equal(strsep(&cp, ", "), "first", 6);        /* Extra delims, 1 tok. */
+  check(strsep(&cp, ", ") == NULL, 7);
+  cp = strcpy(one, "1a, 1b; 2a, 2b");
+  equal(strsep(&cp, ", "), "1a", 8);   /* Changing delim lists. */
+  equal(strsep(&cp, "; "), "1b", 9);
+  equal(strsep(&cp, ", "), "2a", 10);
+  cp = strcpy(two, "x-y");
+  equal(strsep(&cp, "-"), "x", 11);    /* New string before done. */
+  equal(strsep(&cp, "-"), "y", 12);
+  check(strsep(&cp, "-") == NULL, 13);
+  cp = strcpy(one, "a,b, c,, ,d");
+  equal(strsep(&cp, ", "), "a", 14);   /* Different separators. */
+  equal(strsep(&cp, ", "), "b", 15);
+  equal(strsep(&cp, " ,"), "c", 16);   /* Permute list too. */
+  equal(strsep(&cp, " ,"), "d", 17);
+  check(strsep(&cp, ", ") == NULL, 18);
+  check(strsep(&cp, ", ") == NULL, 19);        /* Persistence. */
+  cp = strcpy(one, ", ");
+  check(strsep(&cp, ", ") == NULL, 20);        /* No tokens. */
+  cp = strcpy(one, "");
+  check(strsep(&cp, ", ") == NULL, 21);        /* Empty string. */
+  cp = strcpy(one, "abc");
+  equal(strsep(&cp, ", "), "abc", 22); /* No delimiters. */
+  check(strsep(&cp, ", ") == NULL, 23);
+  cp = strcpy(one, "abc");
+  equal(strsep(&cp, ""), "abc", 24);   /* Empty delimiter list. */
+  check(strsep(&cp, "") == NULL, 25);
+  (void) strcpy(one, "abcdefgh");
+  cp = strcpy(one, "a,b,c");
+  equal(strsep(&cp, ","), "a", 26);    /* Basics again... */
+  equal(strsep(&cp, ","), "b", 27);
+  equal(strsep(&cp, ","), "c", 28);
+  check(strsep(&cp, ",") == NULL, 29);
+  equal(one+6, "gh", 30);                      /* Stomped past end? */
+  equal(one, "a", 31);                 /* Stomped old tokens? */
+  equal(one+2, "b", 32);
+  equal(one+4, "c", 33);
+
   /* memcmp.  */
   it = "memcmp";
   check(memcmp("a", "a", 1) == 0, 1);  /* Identity. */
index a135cf25b2755725c4cb4cbb6fcf5511693a4f97..160618a3d1ed557d5716d52b377cb0e6866f85a5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 95, 96 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
@@ -36,7 +36,7 @@ enum
     IPPROTO_IDP = 22,  /* XNS IDP protocol.  */
 
     IPPROTO_RAW = 255, /* Raw IP packets.  */
-    IPPROTO_MAX,
+    IPPROTO_MAX
   };
 
 /* Standard well-known ports.  */
@@ -76,7 +76,7 @@ enum
     IPPORT_RESERVED = 1024,
 
     /* Ports greater this value are reserved for (non-privileged) servers.  */
-    IPPORT_USERRESERVED = 5000,
+    IPPORT_USERRESERVED = 5000
   };
 
 
diff --git a/sysdeps/generic/strtok.c b/sysdeps/generic/strtok.c
new file mode 100644 (file)
index 0000000..9544713
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright (C) 1991, 1996 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.  */
+
+#include <errno.h>
+#include <string.h>
+
+
+static char *olds = NULL;
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the last string strtok() was called with is
+   used.  For example:
+       char s[] = "-abc-=-def";
+       x = strtok(s, "-");             // x = "abc"
+       x = strtok(NULL, "-=");         // x = "def"
+       x = strtok(NULL, "=");          // x = NULL
+               // s = "abc\0-def\0"
+*/
+char *
+strtok (s, delim)
+     char *s;
+     const char *delim;
+{
+  char *token;
+
+  if (s == NULL)
+    {
+      if (olds == NULL)
+       {
+         errno = EINVAL;
+         return NULL;
+       }
+      else
+       s = olds;
+    }
+
+  /* Scan leading delimiters.  */
+  s += strspn (s, delim);
+  if (*s == '\0')
+    {
+      olds = NULL;
+      return NULL;
+    }
+
+  /* Find the end of the token.  */
+  token = s;
+  s = strpbrk (token, delim);
+  if (s == NULL)
+    /* This token finishes the string.  */
+    olds = NULL;
+  else
+    {
+      /* Terminate the token and make OLDS point past it.  */
+      *s = '\0';
+      olds = s + 1;
+    }
+  return token;
+}
diff --git a/sysdeps/generic/strtok_r.c b/sysdeps/generic/strtok_r.c
new file mode 100644 (file)
index 0000000..08a2936
--- /dev/null
@@ -0,0 +1,74 @@
+/* Reentrant string tokenizer.  Generic version.
+Copyright (C) 1991, 1996 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.  */
+
+#include <errno.h>
+#include <string.h>
+
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+       char s[] = "-abc-=-def";
+       char *sp;
+       x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+       x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+       x = strtok_r(NULL, "=", &sp);   // x = NULL
+               // s = "abc\0-def\0"
+*/
+char *
+strtok_r (s, delim, save_ptr)
+     char *s;
+     const char *delim;
+     char **save_ptr;
+{
+  char *token;
+
+  if (s == NULL)
+    {
+      if (*save_ptr == NULL)
+       {
+         errno = EINVAL;
+         return NULL;
+       }
+      else
+       s = *save_ptr;
+    }
+
+  /* Scan leading delimiters.  */
+  s += strspn (s, delim);
+  if (*s == '\0')
+    {
+      *save_ptr = NULL;
+      return NULL;
+    }
+
+  /* Find the end of the token.  */
+  token = s;
+  s = strpbrk (token, delim);
+  if (s == NULL)
+    /* This token finishes the string.  */
+    *save_ptr = NULL;
+  else
+    {
+      /* Terminate the token and make *SAVE_PTR point past it.  */
+      *s = '\0';
+      *save_ptr = s + 1;
+    }
+  return token;
+}
index e3d2181bdb69b3656946dc221a4f7b9d75a0c872..081a797933106f44ea5054a50d3a728a9ba94e7a 100644 (file)
@@ -1,6 +1,6 @@
 /* strcat(dest, src) -- Append SRC on the end of DEST.
 For Intel 80x86, x>=4.
-Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
 Contributed by Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>.
 Optimised a little by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
 This file is part of the GNU C Library.
@@ -40,19 +40,19 @@ ENTRY (strcat)
        jz L8                   /* yes => return */
 
        /* Test the first bytes separately until destination is aligned.  */
-       testb $3, %edx          /* destination pointer aligned? */
+       testl $3, %edx          /* destination pointer aligned? */
        jz L1                   /* yes => begin scan loop */
        testb $0xff, (%edx)     /* is end of string? */
        jz L2                   /* yes => start appending */
        incl %edx               /* increment source pointer */
 
-       testb $3, %edx          /* destination pointer aligned? */
+       testl $3, %edx          /* destination pointer aligned? */
        jz L1                   /* yes => begin scan loop */
        testb $0xff, (%edx)     /* is end of string? */
        jz L2                   /* yes => start appending */
        incl %edx               /* increment source pointer */
 
-       testb $3, %edx          /* destination pointer aligned? */
+       testl $3, %edx          /* destination pointer aligned? */
        jz L1                   /* yes => begin scan loop */
        testb $0xff, (%edx)     /* is end of string? */
        jz L2                   /* yes => start appending */
@@ -152,27 +152,27 @@ L3:       testb %al, %al          /* is first byte NUL? */
 L2:    subl %ecx, %edx         /* reduce number of loop variants */
 
        /* Now we have to align the source pointer.  */
-       testb $3, %ecx          /* pointer correctly aligned? */
+       testl $3, %ecx          /* pointer correctly aligned? */
        jz L29                  /* yes => start copy loop */
        movb (%ecx), %al        /* get first byte */
        movb %al, (%ecx,%edx)   /* and store it */
-       andl %al, %al           /* is byte NUL? */
+       andb %al, %al           /* is byte NUL? */
        jz L8                   /* yes => return */
        incl %ecx               /* increment pointer */
 
-       testb $3, %ecx          /* pointer correctly aligned? */
+       testl $3, %ecx          /* pointer correctly aligned? */
        jz L29                  /* yes => start copy loop */
        movb (%ecx), %al        /* get first byte */
        movb %al, (%ecx,%edx)   /* and store it */
-       andl %al, %al           /* is byte NUL? */
+       andb %al, %al           /* is byte NUL? */
        jz L8                   /* yes => return */
        incl %ecx               /* increment pointer */
 
-       testb $3, %ecx          /* pointer correctly aligned? */
+       testl $3, %ecx          /* pointer correctly aligned? */
        jz L29                  /* yes => start copy loop */
        movb (%ecx), %al        /* get first byte */
        movb %al, (%ecx,%edx)   /* and store it */
-       andl %al, %al           /* is byte NUL? */
+       andb %al, %al           /* is byte NUL? */
        jz L8                   /* yes => return */
        incl %ecx               /* increment pointer */
 
diff --git a/sysdeps/i386/strsep.S b/sysdeps/i386/strsep.S
new file mode 100644 (file)
index 0000000..8c425dd
--- /dev/null
@@ -0,0 +1,3 @@
+#define FUNCTION strsep
+#define USE_AS_STRSEP  1
+#include <sysdeps/i386/strtok.S>
diff --git a/sysdeps/i386/strtok.S b/sysdeps/i386/strtok.S
new file mode 100644 (file)
index 0000000..28845e0
--- /dev/null
@@ -0,0 +1,329 @@
+/* strtok (str, delim) -- Return next DELIM separated token from STR.
+For Intel 80x86, x>=3.
+Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+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.  */
+
+#include <errnos.h>
+#include <sysdep.h>
+
+/* This file can be used for three variants of the strtok function:
+
+   strtok:
+       INPUT PARAMETER:
+       str             (sp + 4)
+       delim           (sp + 8)
+
+   strtok_r:
+       INPUT PARAMETER:
+       str             (sp + 4)
+       delim           (sp + 8)
+       save_ptr        (sp + 12)
+
+   strsep:
+       INPUT PARAMETERS
+       str_ptr         (sp + 4)
+       delim           (sp + 8)
+
+   We do a common implementation here.  */
+
+#if !defined (USE_AS_STRTOK_R) && !defined (USE_AS_STRSEP)
+       .bss
+       .local save_ptr
+       ASM_TYPE_DIRECTIVE (save_ptr, @object)
+       .size save_ptr, 4
+save_ptr:
+       .space 4
+
+#define FUNCTION strtok
+#endif
+
+       /* We use the possibility to do some more initialization
+          for the strtok implementation.  */
+       .text
+Lillegal_argument:
+#ifndef PIC
+       movl $EINVAL, C_SYMBOL_NAME(errno)
+       xorl %eax, %eax
+#else
+# if defined (USE_AS_STRTOK_R) || defined (USE_AS_STRSEP)
+       pushl %ebx                      /* Save PIC register.  */
+       call Lhere2
+Lhere2:        popl %ebx
+       addl $_GLOBAL_OFFSET_TABLE_+[.-Lhere2], %ebx
+# endif
+       movl errno@GOT(%ebx), %ebx
+       movl $EINVAL, (%ebx)
+       xorl %eax, %eax
+       popl %ebx
+#endif
+       ret
+
+
+ENTRY (FUNCTION)
+
+       movl 4(%esp), %edx              /* Get start of string.  */
+       movl 8(%esp), %eax              /* Get start of delimiter set.  */
+
+#ifdef USE_AS_STRSEP
+       /* %EDX does not yet contain the string starting point.  Only
+          a pointer to the location where it is stored.  */
+       movl (%edx), %edx
+#else
+# if !defined (USE_AS_STRTOK_R) && defined (PIC)
+       pushl %ebx                      /* Save PIC register.  */
+       call Lhere
+Lhere: popl %ebx
+       addl $_GLOBAL_OFFSET_TABLE_+[.-Lhere], %ebx
+# endif
+
+       /* If the pointer is NULL we have to use the stored value of
+          the last run.  */
+       cmpl $0, %edx
+       jne L0
+
+# ifdef USE_AS_STRTOK_R
+       /* The value is stored in the third argument.  */
+       movl 12(%esp), %edx
+       movl (%edx), %edx
+# else
+       /* The value is in the local variable defined above.  But
+          we have to take care for PIC code.  */
+#  ifndef PIC
+       movl save_ptr, %edx
+#  else
+       movl save_ptr@GOTOFF(%ebx), %edx
+#  endif
+# endif
+#endif
+
+       /* Compare whether pointer is NULL.  We are tolerant here
+          because the C function do the same.  */
+       cmpl $0, %edx
+       je Lillegal_argument
+
+#ifndef USE_AS_STRSEP
+L0:
+#endif
+       /* First we create a table with flags for all possible characters.
+          For the ASCII (7bit/8bit) or ISO-8859-X character sets which are
+          supported by the C string functions we have 256 characters.
+          Before inserting marks for the stop characters we clear the whole
+          table.  The unrolled form is much faster than a loop.  */
+       xorl %ecx, %ecx         /* %ecx = 0 !!! */
+
+       pushl %ecx              /* make a 256 bytes long block filled with 0 */
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl %ecx
+       pushl $0                /* These immediate values make the label 2 */
+       pushl $0                /* to be aligned on a 16 byte boundary to */
+       pushl $0                /* get a better performance of the loop.  */
+       pushl $0
+       pushl $0
+       pushl $0
+
+/* For understanding the following code remember that %ecx == 0 now.
+   Although all the following instruction only modify %cl we always
+   have a correct zero-extended 32-bit value in %ecx.  */
+
+L2:    movb (%eax), %cl        /* get byte from stopset */
+       testb %cl, %cl          /* is NUL char? */
+       jz L1                   /* yes => start compare loop */
+       movb %cl, (%esp,%ecx)   /* set corresponding byte in stopset table */
+
+       movb 1(%eax), %cl       /* get byte from stopset */
+       testb $0xff, %cl        /* is NUL char? */
+       jz L1                   /* yes => start compare loop */
+       movb %cl, (%esp,%ecx)   /* set corresponding byte in stopset table */
+
+       movb 2(%eax), %cl       /* get byte from stopset */
+       testb $0xff, %cl        /* is NUL char? */
+       jz L1                   /* yes => start compare loop */
+       movb %cl, (%esp,%ecx)   /* set corresponding byte in stopset table */
+
+       movb 3(%eax), %cl       /* get byte from stopset */
+       addl $4, %eax           /* increment stopset pointer */
+       movb %cl, (%esp,%ecx)   /* set corresponding byte in stopset table */
+       testb $0xff, %cl        /* is NUL char? */
+       jnz L2                  /* no => process next dword from stopset */
+
+L1:    leal -4(%edx), %eax     /* prepare loop */
+
+       /* We use a neat trick for the following loop.  Normally we would
+          have to test for two termination conditions
+          1. a character in the stopset was found
+          and
+          2. the end of the string was found
+          But as a sign that the chracter is in the stopset we store its
+          value in the table.  But the value of NUL is NUL so the loop
+          terminates for NUL in every case.  */
+
+L3:    addl $4, %eax           /* adjust pointer for full loop round */
+
+       movb (%eax), %cl        /* get byte from string */
+       testb %cl, (%esp,%ecx)  /* is it contained in stopset? */
+       jz L4                   /* no => start of token */
+
+       movb 1(%eax), %cl       /* get byte from string */
+       testb %cl, (%esp,%ecx)  /* is it contained in stopset? */
+       jz L5                   /* no => start of token */
+
+       movb 2(%eax), %cl       /* get byte from string */
+       testb %cl, (%esp,%ecx)  /* is it contained in stopset? */
+       jz L6                   /* no => start of token */
+
+       movb 3(%eax), %cl       /* get byte from string */
+       testb %cl, (%esp,%ecx)  /* is it contained in stopset? */
+       jnz L3                  /* yes => start of loop */
+
+       incl %eax               /* adjust pointer */
+L6:    incl %eax
+L5:    incl %eax
+
+       /* Now we have to terminate the string.  */
+
+L4:    leal -4(%eax), %edx     /* We use %EDX for the next run.  */
+
+L7:    addl $4, %edx           /* adjust pointer for full loop round */
+
+       movb (%edx), %cl        /* get byte from string */
+       cmpb %cl, (%esp,%ecx)   /* is it contained in skipset? */
+       je L8                   /* yes => return */
+
+       movb 1(%edx), %cl       /* get byte from string */
+       cmpb %cl, (%esp,%ecx)   /* is it contained in skipset? */
+       je L9                   /* yes => return */
+
+       movb 2(%edx), %cl       /* get byte from string */
+       cmpb %cl, (%esp,%ecx)   /* is it contained in skipset? */
+       je L10                  /* yes => return */
+
+       movb 3(%edx), %cl       /* get byte from string */
+       cmpb %cl, (%esp,%ecx)   /* is it contained in skipset? */
+       jne L7                  /* no => start loop again */
+
+       incl %edx               /* adjust pointer */
+L10:   incl %edx
+L9:    incl %edx
+
+L8:    /* Remove the stopset table.  */
+       addl $256, %esp
+
+       cmpl %eax, %edx
+       je LreturnNULL          /* There was no token anymore.  */
+
+       movb $0, (%edx)         /* Terminate string.  */
+
+       /* Are we at end of string?  */
+       cmpb $0, %cl
+       je L11
+
+       incl %edx
+L11:
+
+       /* Store the pointer to the next character.  */
+#ifdef USE_AS_STRTOK_R
+       movl 12(%esp), %ecx
+       movl %edx, (%ecx)
+#elif USE_AS_STRSEP
+       movl 4(%esp), %ecx
+       movl %edx, (%ecx)
+#else
+# ifndef PIC
+       movl %edx, save_ptr
+# else
+       movl %edx, save_ptr@GOTOFF(%ebx)
+       popl %ebx
+# endif
+#endif
+       ret
+
+LreturnNULL:
+       xorl %eax, %eax
+
+       /* Store NULL as pointer to the next character.  */
+#ifdef USE_AS_STRTOK_R
+       movl 12(%esp), %ecx
+       movl %eax, (%ecx)
+#elif USE_AS_STRSEP
+       movl 4(%esp), %ecx
+       movl %eax, (%ecx)
+#else
+# ifndef PIC
+       movl %eax, save_ptr
+# else
+       movl %eax, save_ptr@GOTOFF(%ebx)
+       popl %ebx
+# endif
+#endif
+       ret
diff --git a/sysdeps/i386/strtok_r.S b/sysdeps/i386/strtok_r.S
new file mode 100644 (file)
index 0000000..297ba28
--- /dev/null
@@ -0,0 +1,3 @@
+#define FUNCTION strtok_r
+#define USE_AS_STRTOK_R        1
+#include <sysdeps/i386/strtok.S>
index eb55d57af763e21faffde45d3424b17db13de9a0..2f563ec3066470c4678fea157e413dd64ffd8c08 100644 (file)
@@ -22,7 +22,7 @@ struct dirent
     unsigned int d_fileno;     /* 32 bits.  */
     unsigned short int d_reclen; /* 16 bits.  */
     unsigned short int d_namlen; /* 16 bits.  */
-    char d_name[0];            /* Variable length.  */
+    char d_name[1];            /* Variable length.  */
   };
 
 #define _DIRENT_HAVE_D_RECLEN 1
index 5decd56db692ed0da6e925898b35d139fba71e96..aa065474bf13e730aef63bdc887fb7d5aaa4351c 100644 (file)
@@ -22,7 +22,7 @@ struct dirent
     unsigned int d_fileno;
     int d_off;                 /* Position in directory of following entry. */
     unsigned short int d_reclen;
-    char d_name[0];            /* Variable length.  */
+    char d_name[1];            /* Variable length.  */
   };
 
 #define _DIRENT_HAVE_D_RECLEN 1
index 7876c408c49c721cd539f6114dbb1208f60b2a7b..4f1b0961ee3d944de20dfb1f87fd3d43ccd8a1b4 100644 (file)
@@ -19,8 +19,10 @@ Cambridge, MA 02139, USA.  */
 #ifndef        _GNU_TYPES_H
 #define        _GNU_TYPES_H    1
 
-/* Get actual type definitions for architecture from kernel headers.  */
-#include <linux/posix_types.h>
+/* Get actual type definitions for architecture from kernel headers.
+   This #define tells <linux/types.h> not to define `dev_t' et al itself.  */
+#define _LINUX_TYPES_DONT_EXPORT
+#include <linux/types.h>
 
 /* Convenience types.  */
 typedef unsigned char __u_char;
index 2ce224ca438ca39acfcb0b8231c9c4b144ba226f..ebe6b4cf58b62dddc1733668713c150f0c1d7308 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 95, 96 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
@@ -36,7 +36,7 @@ enum
     IPPROTO_IDP = 22,  /* XNS IDP protocol.  */
 
     IPPROTO_RAW = 255, /* Raw IP packets.  */
-    IPPROTO_MAX,
+    IPPROTO_MAX
   };
 
 /* Standard well-known ports.  */
@@ -76,7 +76,7 @@ enum
     IPPORT_RESERVED = 1024,
 
     /* Ports greater this value are reserved for (non-privileged) servers.  */
-    IPPORT_USERRESERVED = 5000,
+    IPPORT_USERRESERVED = 5000
   };
 
 
index ac422bfc42fff1126a33ee17b99c423bff9e2001..5efb638c9e96736d46a9d32b1eadbc032349d9c5 100644 (file)
@@ -64,7 +64,9 @@ installed-posixrules-file := $(firstword $(filter /%,$(posixrules-file)) \
 
 ifeq ($(cross-compiling),no)
 # Don't try to install the zoneinfo files since we can't run zic.
-install-others = $(addprefix $(zonedir)/,$(zonenames)) \
+install-others = $(addprefix $(zonedir)/,$(zonenames) \
+                                        $(zonenames:%=posix/%) \
+                                        $(zonenames:%=right/%)) \
                 $(installed-localtime-file) $(installed-posixrules-file)
 endif
 
@@ -81,8 +83,14 @@ $(tzfiles:%=$(objpfx)z.%): $(objpfx)z.%: % Makefile
         echo '$*-zones := $$(subst $$(nl), ,$$($*-zones))'             ;\
         echo 'ifdef $*-zones'                                          ;\
         echo '$$(addprefix $$(datadir)/zone%/,$$($*-zones)): \'        ;\
+        echo '$< $$(objpfx)zic $$(leapseconds) yearistype'             ;\
+        echo ' $$(tzcompile)'                                          ;\
+        echo '$$(addprefix $$(datadir)/zone%/right/,$$($*-zones)): \'  ;\
         echo '$< $$(objpfx)zic leapseconds yearistype'                 ;\
         echo ' $$(tzcompile)'                                          ;\
+        echo '$$(addprefix $$(datadir)/zone%/posix/,$$($*-zones)): \'  ;\
+        echo '$< $$(objpfx)zic /dev/null yearistype'                   ;\
+        echo ' $$(tzcompile)'                                          ;\
         echo 'endif'                                                   ;\
         echo 'zonenames := $$(zonenames) $$($*-zones)'                 ;\
        ) > $@.new
@@ -98,9 +106,18 @@ echo-zonenames: zonenames
 # the command line of `make install' (e.g., "make install prefix=/foo").
 zic-cmd = $(built-program-cmd) -d $(zonedir)
 define tzcompile
-$(zic-cmd) -L $(word 3,$^) -y $(dir $(word 4,$^))$(notdir $(word 4,$^)) $<
+$(zic-cmd)$(target-zone-flavor)
+ -L $(word 3,$^) -y $(dir $(word 4,$^))$(notdir $(word 4,$^)) $<
 endef
 
+# The source files specify the zone names relative to the -d directory,
+# so for the posix/ and right/ flavors we need to pass -d $(zonedir)/posix
+# and the like.  This magic extracts /posix or /right if it's the first
+# component after $(zonedir) in the target name $@.
+target-zone-flavor = $(filter /posix /right, \
+                             /$(firstword $(subst /, , \
+                                          $(patsubst $(zonedir)/%,%,$@))))
+
 ifdef localtime
 $(installed-localtime-file): $(zonedir)/$(localtime) $(objpfx)zic
        $(zic-cmd) -l $(localtime)
index 2635155dd2e2b40ed9bef14b4416b751d7ef3a96..007997f5411628a766f2b6e04c51489b9f4e3ad5 100644 (file)
@@ -90,18 +90,23 @@ DEFUN_VOID(__tzset)
       tz_rules[1].name != tz_rules[0].name)
     free((PTR) tz_rules[1].name);
 
-  tz = getenv("TZ");
+  /* Examine the TZ environment variable.  */
+  tz = getenv ("TZ");
 
-  if (tz != NULL && *tz == ':')
+  if (tz != NULL)
     {
-      __tzfile_read(tz + 1);
+      /* A leading colon means "implementation defined syntax".
+        We ignore the colon and always use the same algorithm:
+        try a data file, and if none exists parse the 1003.1 syntax.  */
+      if (*tz == ':')
+       ++tz;
+
+      __tzfile_read (tz);
       if (__use_tzfile)
        {
          __tzset_run = 1;
          return;
        }
-      else
-       tz = NULL;
     }
 
   if (tz == NULL || *tz == '\0')
index 3b15d9f38ad85cd9ce4ed03eab61ae8b129d1705..b54170c3f35d37fcd2569f5d8a7f2ede31c751d2 100644 (file)
@@ -27,44 +27,31 @@ Cambridge, MA 02139, USA.  */
 
 __BEGIN_DECLS
 
-/* Get size_t, wchar_t, uwchar_t and NULL from <stddef.h>.  */
+/* Get size_t, wchar_t, wint_t and NULL from <stddef.h>.  */
 #define __need_size_t
 #define __need_wchar_t
-/* #define __need_uwchar_t */
+#define __need_wint_t
 #define __need_NULL
-/* __need_WCHAR_MAX */
-/* __need_WCHAR_MIN */
 #include <stddef.h>
 
-/* FIXME: Should go with this or another name in stddef.h.  */
-typedef unsigned int uwchar_t;
-
 /* Conversion state information.  */
 typedef int mbstate_t; /* FIXME */
 
-/* Should come from <stddef.h> */
-#define WCHAR_MIN ((wchar_t) 0)        /* FIXME */
-#define WCHAR_MAX (~WCHAR_MIN) /* FIXME */
+#define WCHAR_MIN ((wchar_t) 0)
+#define WCHAR_MAX (~WCHAR_MIN)
 
 #ifndef WEOF
 # define WEOF (0xffffffffu)
 #endif
 
-/* FIXME: should this go into <stddef.h>???  */
-#if 0
-#define __need_wint_t
-#include <stddef.h>
-#else
+#ifndef _WINT_T
 /* Integral type unchanged by default argument promotions that can
    hold any value corresponding to members of the extended character
    set, as well as at least one value that does not correspond to any
    member of the extended character set.  */
-#ifndef __have_wint_t_defined
-#define __have_wint_t_defined 1
-/* This is a hack!!! */
+#define _WINT_T        1
 typedef unsigned int wint_t;
 #endif
-#endif
 
 
 /* Copy SRC to DEST.  */
index 08da116787ddd607998fd6b6f167aa3943c237b0..2cc31992d2f18d96b46a6831109c22ea77edd22b 100644 (file)
@@ -1,6 +1,6 @@
 /* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
-Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
 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
@@ -13,9 +13,9 @@ 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+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.  */
 
 #include <wchar.h>
 
@@ -28,12 +28,12 @@ wcscmp (s1, s2)
      const wchar_t *s1;
      const wchar_t *s2;
 {
-  uwchar_t c1, c2;
+  wint_t c1, c2;
 
   do
     {
-      c1 = (uwchar_t) *s1++;
-      c2 = (uwchar_t) *s2++;
+      c1 = (wint_t) *s1++;
+      c2 = (wint_t) *s2++;
       if (c1 == L'\0')
        return c1 - c2;
     }
index e033b4a6de873ef401f25a5068d8c9d205d9944a..ad4c23244b4c747c1f704b9c11efa33c263dda3c 100644 (file)
@@ -19,7 +19,7 @@ Boston, MA 02111-1307, USA.  */
 #include <wchar.h>
 
 #define STRING_TYPE wchar_t
-#define USTRING_TYPE uwchar_t
+#define USTRING_TYPE wint_t
 #define STRCOLL wcscoll
 #define STRCMP wcscmp
 
index 3df6bfc151d43085239cb3b20793fe86bdf1e2e1..fb554cbfb5e0c57fe23cb15fc4fbd7bedca8a026 100644 (file)
@@ -1,6 +1,6 @@
 /* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
-Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
 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
@@ -13,9 +13,9 @@ 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+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.  */
 
 #include <wchar.h>
 
@@ -30,28 +30,28 @@ wcsncmp (s1, s2, n)
      const wchar_t *s2;
      size_t n;
 {
-  uwchar_t c1 = L'\0';
-  uwchar_t c2 = L'\0';
+  wint_t c1 = L'\0';
+  wint_t c2 = L'\0';
 
   if (n >= 4)
     {
       size_t n4 = n >> 2;
       do
        {
-         c1 = (uwchar_t) *s1++;
-         c2 = (uwchar_t) *s2++;
+         c1 = (wint_t) *s1++;
+         c2 = (wint_t) *s2++;
          if (c1 == L'\0' || c1 != c2)
            return c1 - c2;
-         c1 = (uwchar_t) *s1++;
-         c2 = (uwchar_t) *s2++;
+         c1 = (wint_t) *s1++;
+         c2 = (wint_t) *s2++;
          if (c1 == L'\0' || c1 != c2)
            return c1 - c2;
-         c1 = (uwchar_t) *s1++;
-         c2 = (uwchar_t) *s2++;
+         c1 = (wint_t) *s1++;
+         c2 = (wint_t) *s2++;
          if (c1 == L'\0' || c1 != c2)
            return c1 - c2;
-         c1 = (uwchar_t) *s1++;
-         c2 = (uwchar_t) *s2++;
+         c1 = (wint_t) *s1++;
+         c2 = (wint_t) *s2++;
          if (c1 == L'\0' || c1 != c2)
            return c1 - c2;
        } while (--n4 > 0);
@@ -60,8 +60,8 @@ wcsncmp (s1, s2, n)
 
   while (n > 0)
     {
-      c1 = (uwchar_t) *s1++;
-      c2 = (uwchar_t) *s2++;
+      c1 = (wint_t) *s1++;
+      c2 = (wint_t) *s2++;
       if (c1 == L'\0' || c1 != c2)
        return c1 - c2;
       n--;
index 376fe7bfcbc61a9cc88f95b502a816983092e01f..b6baf311a40d90ccb4f881c118957c8169a05583 100644 (file)
@@ -1,6 +1,6 @@
 /* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
-Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
 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
@@ -13,9 +13,9 @@ 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+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.  */
 
 #include <wchar.h>
 #include <errno.h>
@@ -25,20 +25,26 @@ Cambridge, MA 02139, USA.  */
    NULL, the last string wcstok() was called with is used.  */
 wchar_t *
 wcstok (wcs, delim, ptr)
-     register wchar_t *wcs;
-     register const wchar_t *delim;
-     register wchar_t **ptr;
+     wchar_t *wcs;
+     const wchar_t *delim;
+     wchar_t **save_ptr;
 {
   wchar_t *result;
 
   if (wcs == NULL)
-    wcs = *ptr;
+    if (*save_ptr == NULL)
+      {
+       errno = EINVAL;
+       return NULL;
+      }
+    else
+      wcs = *save_ptr;
 
   /* Scan leading delimiters.  */
   wcs += wcsspn (wcs, delim);
   if (*wcs == L'\0')
     {
-      *ptr = NULL;
+      *save_ptr = NULL;
       return NULL;
     }
 
@@ -47,12 +53,12 @@ wcstok (wcs, delim, ptr)
   wcs = wcspbrk (result, delim);
   if (wcs == NULL)
     /* This token finishes the string. */
-    *ptr = NULL;
+    *save_ptr = NULL;
   else
     {
-      /* Terminate the token and make OLDS point past it.  */
+      /* Terminate the token and make *SAVE_PTR point past it.  */
       *wcs = L'\0';
-      *ptr = wcs + 1;
+      *save_ptr = wcs + 1;
     }
   return result;
 }
index 96a32382e0429903bca769cf5832d506d15e0380..0a04fd96f2f75aed24a7f6dce2b55a523379c70e 100644 (file)
@@ -18,8 +18,10 @@ Boston, MA 02111-1307, USA.  */
 
 #include <wchar.h>
 
+#define WIDE_VERSION 1
 #define STRING_TYPE wchar_t
-#define USTRING_TYPE uwchar_t
+#define USTRING_TYPE wint_t
+#define L_(Ch) L##Ch
 #define STRXFRM wcsxfrm
 #define STRLEN wcslen
 #define STPNCPY __wcpncpy
index f96cad9c0ed7da063378a6622e99afa5582bd1e2..8d04148466e61ac259c0401aad1f980502262867 100644 (file)
@@ -1,6 +1,6 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
-Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
 
 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
@@ -26,25 +26,25 @@ wmemcmp (s1, s2, n)
      const wchar_t *s2;
      size_t n;
 {
-  register uwchar_t c1;
-  register uwchar_t c2;
+  register wint_t c1;
+  register wint_t c2;
 
   while (n >= 4)
     {
-      c1 = (uwchar_t) s1[0];
-      c2 = (uwchar_t) s2[0];
+      c1 = (wint_t) s1[0];
+      c2 = (wint_t) s2[0];
       if (c1 - c2 != 0)
        return c1 - c2;
-      c1 = (uwchar_t) s1[1];
-      c2 = (uwchar_t) s2[1];
+      c1 = (wint_t) s1[1];
+      c2 = (wint_t) s2[1];
       if (c1 - c2 != 0)
        return c1 - c2;
-      c1 = (uwchar_t) s1[2];
-      c2 = (uwchar_t) s2[2];
+      c1 = (wint_t) s1[2];
+      c2 = (wint_t) s2[2];
       if (c1 - c2 != 0)
        return c1 - c2;
-      c1 = (uwchar_t) s1[3];
-      c2 = (uwchar_t) s2[3];
+      c1 = (wint_t) s1[3];
+      c2 = (wint_t) s2[3];
       if (c1 - c2 != 0)
        return c1 - c2;
       s1 += 4;
@@ -54,8 +54,8 @@ wmemcmp (s1, s2, n)
 
   if (n > 0)
     {
-      c1 = (uwchar_t) s1[0];
-      c2 = (uwchar_t) s2[0];
+      c1 = (wint_t) s1[0];
+      c2 = (wint_t) s2[0];
       if (c1 - c2 != 0)
        return c1 - c2;
       ++s1;
@@ -64,8 +64,8 @@ wmemcmp (s1, s2, n)
     }
   if (n > 0)
     {
-      c1 = (uwchar_t) s1[0];
-      c2 = (uwchar_t) s2[0];
+      c1 = (wint_t) s1[0];
+      c2 = (wint_t) s2[0];
       if (c1 - c2 != 0)
        return c1 - c2;
       ++s1;
@@ -74,8 +74,8 @@ wmemcmp (s1, s2, n)
     }
   if (n > 0)
     {
-      c1 = (uwchar_t) s1[0];
-      c2 = (uwchar_t) s2[0];
+      c1 = (wint_t) s1[0];
+      c2 = (wint_t) s2[0];
       if (c1 - c2 != 0)
        return c1 - c2;
     }