diff options
| author | Ulrich Drepper <drepper@redhat.com> | 2000-02-11 18:50:36 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 2000-02-11 18:50:36 +0000 |
| commit | a1d84548c8aa7023cd039c85f81b831eef6d4a4c (patch) | |
| tree | d4f80547dd8c427aebbf0b43051d01206ea972ae | |
| parent | f296f567c3f69fd2a61983f464d5c52174e3bab8 (diff) | |
| download | glibc-a1d84548c8aa7023cd039c85f81b831eef6d4a4c.tar.xz glibc-a1d84548c8aa7023cd039c85f81b831eef6d4a4c.zip | |
Update.
2000-02-11 Ulrich Drepper <drepper@redhat.com>
* stdio-common/printf-parse.h (parse_one_spec): Set wide elements.
* stdio-common/printf_fp.c: Truely support wide characater output.
Finally handle decimal points and thousands separator characters
correctly for multibyte output.
* stdio-common/printf_size.c: Likewise.
* sysdeps/generic/printf_fphex.c: Likewise.
* sysdeps/ieee754/ldbl-96/printf_fphex.c: Likewise.
* stdio-common/vfscanf.c: Implement I modifier for numbers to read
locale dependent digits.
* locale/C-monetary.c (_nl_C_LC_MONETARY): Change wide character
decimal point and thousands separator values to wide characters from
wide character strings.
* locale/C-numeric.c (_nl_C_LC_NUMERIC): Likewise.
* locale/indigitswc.h: Dereference wcdigits array elements.
2000-02-03 Jakub Jelinek <jakub@redhat.com>
* stdlib/canonicalize.c (canonicalize): Zero terminate
path to copy on error.
2000-02-01 Cristian Gafton <gafton@redhat.com>
* misc/syslog.c (closelog): Reset LogType to SOCK_DGRAM.
2000-01-31 Philip Blundell <philb@gnu.org>
* sysdeps/arm/fpu/fpu_control.h (_FPU_DEFAULT): Set the AC bit.
2000-01-31 Andreas Jaeger <aj@suse.de>
* intl/Makefile (generated): msgs.h is generated.
* localedata/Makefile (generated-dirs): Add de_DE.437.
2000-01-31 Jakub Jelinek <jakub@redhat.com>
* config.make.in: Allow default localedir to come from configure.
* configure.in: Export libc_cv_localedir.
* sysdeps/unix/sysv/linux/configure.in: For sparc64, put locale
stuff into $exec_prefix/lib/locale because it can be shared between
32bit and 64bit libraries.
* configure: Rebuilt.
* sysdeps/unix/sysv/linux/configure: Rebuilt.
2000-01-31 Andreas Jaeger <aj@suse.de>
* inet/tst-network.c: New file.
* inet/Makefile (tests): Add tst-network.
* inet/inet_net.c (inet_network): Don't overwrite memory or allow
to great last digits.
| -rw-r--r-- | ChangeLog | 58 | ||||
| -rw-r--r-- | config.make.in | 1 | ||||
| -rwxr-xr-x | configure | 1 | ||||
| -rw-r--r-- | configure.in | 1 | ||||
| -rw-r--r-- | inet/Makefile | 4 | ||||
| -rw-r--r-- | inet/inet_net.c | 8 | ||||
| -rw-r--r-- | inet/tst-network.c | 73 | ||||
| -rw-r--r-- | intl/Makefile | 2 | ||||
| -rw-r--r-- | linuxthreads/condvar.c | 95 | ||||
| -rw-r--r-- | locale/C-monetary.c | 4 | ||||
| -rw-r--r-- | locale/C-numeric.c | 4 | ||||
| -rw-r--r-- | locale/indigitswc.h | 4 | ||||
| -rw-r--r-- | localedata/CHECKSUMS | 239 | ||||
| -rw-r--r-- | localedata/Makefile | 3 | ||||
| -rw-r--r-- | localedata/charmaps/IBM864 | 2 | ||||
| -rw-r--r-- | localedata/charmaps/ISO-8859-8 | 4 | ||||
| -rw-r--r-- | localedata/charmaps/ISO-IR-90 | 2 | ||||
| -rw-r--r-- | localedata/charmaps/NEXTSTEP | 5 | ||||
| -rw-r--r-- | misc/syslog.c | 3 | ||||
| -rw-r--r-- | stdio-common/printf-parse.h | 1 | ||||
| -rw-r--r-- | stdio-common/printf_fp.c | 347 | ||||
| -rw-r--r-- | stdio-common/printf_size.c | 47 | ||||
| -rw-r--r-- | stdio-common/vfscanf.c | 150 | ||||
| -rw-r--r-- | stdlib/canonicalize.c | 8 | ||||
| -rw-r--r-- | sysdeps/arm/fpu/fpu_control.h | 2 | ||||
| -rw-r--r-- | sysdeps/generic/printf_fphex.c | 155 | ||||
| -rw-r--r-- | sysdeps/ieee754/ldbl-96/printf_fphex.c | 24 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/configure | 2 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/configure.in | 2 |
29 files changed, 849 insertions, 402 deletions
@@ -1,3 +1,61 @@ +2000-02-11 Ulrich Drepper <drepper@redhat.com> + + * stdio-common/printf-parse.h (parse_one_spec): Set wide elements. + + * stdio-common/printf_fp.c: Truely support wide characater output. + Finally handle decimal points and thousands separator characters + correctly for multibyte output. + * stdio-common/printf_size.c: Likewise. + * sysdeps/generic/printf_fphex.c: Likewise. + * sysdeps/ieee754/ldbl-96/printf_fphex.c: Likewise. + + * stdio-common/vfscanf.c: Implement I modifier for numbers to read + locale dependent digits. + + * locale/C-monetary.c (_nl_C_LC_MONETARY): Change wide character + decimal point and thousands separator values to wide characters from + wide character strings. + * locale/C-numeric.c (_nl_C_LC_NUMERIC): Likewise. + + * locale/indigitswc.h: Dereference wcdigits array elements. + +2000-02-03 Jakub Jelinek <jakub@redhat.com> + + * stdlib/canonicalize.c (canonicalize): Zero terminate + path to copy on error. + +2000-02-01 Cristian Gafton <gafton@redhat.com> + + * misc/syslog.c (closelog): Reset LogType to SOCK_DGRAM. + +2000-01-31 Philip Blundell <philb@gnu.org> + + * sysdeps/arm/fpu/fpu_control.h (_FPU_DEFAULT): Set the AC bit. + +2000-01-31 Andreas Jaeger <aj@suse.de> + + * intl/Makefile (generated): msgs.h is generated. + + * localedata/Makefile (generated-dirs): Add de_DE.437. + +2000-01-31 Jakub Jelinek <jakub@redhat.com> + + * config.make.in: Allow default localedir to come from configure. + * configure.in: Export libc_cv_localedir. + * sysdeps/unix/sysv/linux/configure.in: For sparc64, put locale + stuff into $exec_prefix/lib/locale because it can be shared between + 32bit and 64bit libraries. + * configure: Rebuilt. + * sysdeps/unix/sysv/linux/configure: Rebuilt. + +2000-01-31 Andreas Jaeger <aj@suse.de> + + * inet/tst-network.c: New file. + * inet/Makefile (tests): Add tst-network. + + * inet/inet_net.c (inet_network): Don't overwrite memory or allow + to great last digits. + 2000-02-10 Andreas Jaeger <aj@suse.de> * sysdeps/unix/sysv/linux/mips/clone.S: Rewritten. diff --git a/config.make.in b/config.make.in index 727ae3c430..9c58330aff 100644 --- a/config.make.in +++ b/config.make.in @@ -12,6 +12,7 @@ exec_prefix = @exec_prefix@ datadir = @datadir@ libdir = @libdir@ slibdir = @libc_cv_slibdir@ +localedir = @libc_cv_localedir@ sysconfdir = @libc_cv_sysconfdir@ libexecdir = @libexecdir@ rootsbindir = @libc_cv_rootsbindir@ @@ -3475,6 +3475,7 @@ s%@uname_version@%$uname_version%g s%@stdio@%$stdio%g s%@old_glibc_headers@%$old_glibc_headers%g s%@libc_cv_slibdir@%$libc_cv_slibdir%g +s%@libc_cv_localedir@%$libc_cv_localedir%g s%@libc_cv_sysconfdir@%$libc_cv_sysconfdir%g s%@libc_cv_rootsbindir@%$libc_cv_rootsbindir%g s%@use_ldconfig@%$use_ldconfig%g diff --git a/configure.in b/configure.in index 4e44f1ed45..f2a0e1a3f9 100644 --- a/configure.in +++ b/configure.in @@ -1283,6 +1283,7 @@ fi AC_SUBST(old_glibc_headers) AC_SUBST(libc_cv_slibdir) +AC_SUBST(libc_cv_localedir) AC_SUBST(libc_cv_sysconfdir) AC_SUBST(libc_cv_rootsbindir) diff --git a/inet/Makefile b/inet/Makefile index d28e226ef4..945f8e50a8 100644 --- a/inet/Makefile +++ b/inet/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc. +# Copyright (C) 1991-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 @@ -48,7 +48,7 @@ routines := htonl htons \ in6_addr getnameinfo if_index getipnodebyad freehostent \ getipnodebynm -tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-ipnode +tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-ipnode tst-network # No warnings about losing BSD code. CFLAGS-rcmd.c = -w diff --git a/inet/inet_net.c b/inet/inet_net.c index cdc4d9dd96..78d22cda6b 100644 --- a/inet/inet_net.c +++ b/inet/inet_net.c @@ -66,7 +66,7 @@ again: continue; } if (base == 16 && isxdigit(c)) { - val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A')); + val = (val << 4) + (tolower (c) + 10 - 'a'); cp++; digit = 1; continue; @@ -75,9 +75,9 @@ again: } if (!digit) return (INADDR_NONE); + if (pp >= parts + 4 || val > 0xff) + return (INADDR_NONE); if (*cp == '.') { - if (pp >= parts + 4 || val > 0xff) - return (INADDR_NONE); *pp++ = val, cp++; goto again; } @@ -85,8 +85,6 @@ again: return (INADDR_NONE); *pp++ = val; n = pp - parts; - if (n > 4) - return (INADDR_NONE); for (val = 0, i = 0; i < n; i++) { val <<= 8; val |= parts[i] & 0xff; diff --git a/inet/tst-network.c b/inet/tst-network.c new file mode 100644 index 0000000000..09e102506d --- /dev/null +++ b/inet/tst-network.c @@ -0,0 +1,73 @@ +/* Test for inet_network. + Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Andreas Jaeger <aj@suse.de>, 2000. + + 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 <stdio.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> + +struct +{ + const char *network; + uint32_t number; +} tests [] = +{ + {"1.0.0.0", 0x1000000}, + {"1.0.0", 0x10000}, + {"1.0", 0x100}, + {"1", 0x1}, + {"192.168.0.0", 0xC0A80000}, + /* Now some invalid addresses. */ + {"141.30.225.2800", INADDR_NONE}, + {"141.76.1.1.1", INADDR_NONE}, + {"141.76.1.11.", INADDR_NONE}, + {"1410", INADDR_NONE}, + {"1.1410", INADDR_NONE}, + {"1.1410.", INADDR_NONE}, + {"1.1410", INADDR_NONE}, + {"141.76.1111", INADDR_NONE}, + {"141.76.1111.", INADDR_NONE} +}; + + +int +main (void) +{ + int errors = 0; + int i; + uint32_t res; + + for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i) + { + printf ("Testing: %s\n", tests[i].network); + res = inet_network (tests[i].network); + + if (res != tests[i].number) + { + printf ("Test failed for inet_network (\"%s\"):\n", + tests[i].network); + printf ("Expected return value %u (0x%x) but got %u (0x%x).\n", + tests[i].number, tests[i].number, res, res); + } + + } + + return errors != 0; +} diff --git a/intl/Makefile b/intl/Makefile index ce7b15b8c7..7b40f2e432 100644 --- a/intl/Makefile +++ b/intl/Makefile @@ -33,6 +33,8 @@ before-compile = $(objpfx)msgs.h install-others = $(inst_msgcatdir)/locale.alias +generated = msgs.h + plural.c: plural.y $(YACC) $(YFLAGS) $@ $^ ifeq ($(with-cvs),yes) diff --git a/linuxthreads/condvar.c b/linuxthreads/condvar.c index 5f0e1939d3..c0c619992d 100644 --- a/linuxthreads/condvar.c +++ b/linuxthreads/condvar.c @@ -26,13 +26,13 @@ #include "restart.h" static int pthread_cond_timedwait_relative_old(pthread_cond_t *, - pthread_mutex_t *, const struct timespec *); + pthread_mutex_t *, struct timespec *); static int pthread_cond_timedwait_relative_new(pthread_cond_t *, - pthread_mutex_t *, const struct timespec *); + pthread_mutex_t *, struct timespec *); static int (*pthread_cond_tw_rel)(pthread_cond_t *, pthread_mutex_t *, - const struct timespec *) = pthread_cond_timedwait_relative_old; + struct timespec *) = pthread_cond_timedwait_relative_old; /* initialize this module */ void __pthread_init_condvar(int rt_sig_available) @@ -130,32 +130,14 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) static int pthread_cond_timedwait_relative_old(pthread_cond_t *cond, pthread_mutex_t *mutex, - const struct timespec * abstime) + struct timespec * reltime) { volatile pthread_descr self = thread_self(); sigset_t unblock, initial_mask; - int retsleep, already_canceled, was_signalled; + int already_canceled = 0; + int was_signalled = 0; sigjmp_buf jmpbuf; pthread_extricate_if extr; - struct timeval now; - struct timespec reltime; - -requeue_and_wait_again: - - /* Compute a time offset relative to now. */ - __gettimeofday (&now, NULL); - reltime.tv_nsec = abstime->tv_nsec - now.tv_usec * 1000; - reltime.tv_sec = abstime->tv_sec - now.tv_sec; - if (reltime.tv_nsec < 0) { - reltime.tv_nsec += 1000000000; - reltime.tv_sec -= 1; - } - if (reltime.tv_sec < 0) - return ETIMEDOUT; - - retsleep = 0; - already_canceled = 0; - was_signalled = 0; /* Set up extrication interface */ extr.pu_object = cond; @@ -191,13 +173,14 @@ requeue_and_wait_again: sigemptyset(&unblock); sigaddset(&unblock, __pthread_sig_restart); sigprocmask(SIG_UNBLOCK, &unblock, &initial_mask); - /* Sleep for the required duration */ - retsleep = __libc_nanosleep(&reltime, NULL); + /* Sleep for the required duration. If woken by a signal, resume waiting + as required by Single Unix Specification. */ + while (__libc_nanosleep(reltime, reltime) != 0) + ; /* Block the restart signal again */ sigprocmask(SIG_SETMASK, &initial_mask, NULL); was_signalled = 0; } else { - retsleep = -1; was_signalled = 1; } THREAD_SETMEM(self, p_signal_jmp, NULL); @@ -229,12 +212,7 @@ requeue_and_wait_again: if (was_on_queue) { __pthread_set_own_extricate_if(self, 0); pthread_mutex_lock(mutex); - - if (retsleep == 0) - return ETIMEDOUT; - /* Woken by a signal: resume waiting as required by Single Unix - Specification. */ - goto requeue_and_wait_again; + return ETIMEDOUT; } suspend(self); @@ -263,30 +241,15 @@ requeue_and_wait_again: static int pthread_cond_timedwait_relative_new(pthread_cond_t *cond, pthread_mutex_t *mutex, - const struct timespec * abstime) + struct timespec * reltime) { volatile pthread_descr self = thread_self(); sigset_t unblock, initial_mask; - int retsleep, already_canceled, was_signalled; + int already_canceled = 0; + int was_signalled = 0; sigjmp_buf jmpbuf; pthread_extricate_if extr; - struct timeval now; - struct timespec reltime; - requeue_and_wait_again: - - /* Compute a time offset relative to now. */ - __gettimeofday (&now, NULL); - reltime.tv_nsec = abstime->tv_nsec - now.tv_usec * 1000; - reltime.tv_sec = abstime->tv_sec - now.tv_sec; - if (reltime.tv_nsec < 0) { - reltime.tv_nsec += 1000000000; - reltime.tv_sec -= 1; - } - if (reltime.tv_sec < 0) - return ETIMEDOUT; - - retsleep = 0; already_canceled = 0; was_signalled = 0; @@ -323,13 +286,14 @@ pthread_cond_timedwait_relative_new(pthread_cond_t *cond, sigemptyset(&unblock); sigaddset(&unblock, __pthread_sig_restart); sigprocmask(SIG_UNBLOCK, &unblock, &initial_mask); - /* Sleep for the required duration */ - retsleep = __libc_nanosleep(&reltime, NULL); + /* Sleep for the required duration. If woken by a signal, resume waiting + as required by Single Unix Specification. */ + while (__libc_nanosleep(reltime, reltime) != 0) + ; /* Block the restart signal again */ sigprocmask(SIG_SETMASK, &initial_mask, NULL); was_signalled = 0; } else { - retsleep = -1; was_signalled = 1; } THREAD_SETMEM(self, p_signal_jmp, NULL); @@ -358,12 +322,7 @@ pthread_cond_timedwait_relative_new(pthread_cond_t *cond, if (was_on_queue) { __pthread_set_own_extricate_if(self, 0); pthread_mutex_lock(mutex); - - if (retsleep == 0) - return ETIMEDOUT; - /* Woken by a signal: resume waiting as required by Single Unix - Specification. */ - goto requeue_and_wait_again; + return ETIMEDOUT; } /* Eat the outstanding restart() from the signaller */ @@ -389,8 +348,22 @@ pthread_cond_timedwait_relative_new(pthread_cond_t *cond, int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec * abstime) { + struct timeval now; + struct timespec reltime; + + /* Compute a time offset relative to now. */ + __gettimeofday (&now, NULL); + reltime.tv_nsec = abstime->tv_nsec - now.tv_usec * 1000; + reltime.tv_sec = abstime->tv_sec - now.tv_sec; + if (reltime.tv_nsec < 0) { + reltime.tv_nsec += 1000000000; + reltime.tv_sec -= 1; + } + if (reltime.tv_sec < 0) + return ETIMEDOUT; + /* Indirect call through pointer! */ - return pthread_cond_tw_rel(cond, mutex, abstime); + return pthread_cond_tw_rel(cond, mutex, &reltime); } int pthread_cond_signal(pthread_cond_t *cond) diff --git a/locale/C-monetary.c b/locale/C-monetary.c index 6c7b4587f9..96a1e52f25 100644 --- a/locale/C-monetary.c +++ b/locale/C-monetary.c @@ -78,7 +78,7 @@ const struct locale_data _nl_C_LC_MONETARY = { word: 99991231 }, { word: 1 }, { word: 1 }, - { wstr: (uint32_t *) L"." }, - { wstr: (uint32_t *) L"" } + { word: (unsigned int) L'.' }, + { word: (unsigned int) L'\0' } } }; diff --git a/locale/C-numeric.c b/locale/C-numeric.c index 00c692799f..fc2e104304 100644 --- a/locale/C-numeric.c +++ b/locale/C-numeric.c @@ -37,7 +37,7 @@ const struct locale_data _nl_C_LC_NUMERIC = { |
