mirror of
git://sourceware.org/git/glibc.git
synced 2025-04-24 14:41:06 +08:00
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.
This commit is contained in:
parent
f296f567c3
commit
a1d84548c8
58
ChangeLog
58
ChangeLog
@ -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.
|
||||
|
@ -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@
|
||||
|
1
configure
vendored
1
configure
vendored
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
73
inet/tst-network.c
Normal file
73
inet/tst-network.c
Normal file
@ -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;
|
||||
}
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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' }
|
||||
}
|
||||
};
|
||||
|
@ -37,7 +37,7 @@ const struct locale_data _nl_C_LC_NUMERIC =
|
||||
{ string: "." },
|
||||
{ string: "" },
|
||||
{ string: not_available },
|
||||
{ wstr: (uint32_t *) L"." },
|
||||
{ wstr: (uint32_t *) L"" }
|
||||
{ word: (unsigned int) L'.' },
|
||||
{ word: (unsigned int) L'\0' }
|
||||
}
|
||||
};
|
||||
|
@ -49,7 +49,7 @@ indigitwc_value (wchar_t wc, int *decided)
|
||||
/* Get the string for the digits with value N. */
|
||||
wcdigits[n] = _NL_CURRENT (LC_CTYPE, _NL_CTYPE_INDIGITS0_WC + n);
|
||||
|
||||
if (wc == wcdigits[n])
|
||||
if (wc == *wcdigits[n])
|
||||
{
|
||||
/* Found it. */
|
||||
if (*decided == -1)
|
||||
@ -67,7 +67,7 @@ indigitwc_value (wchar_t wc, int *decided)
|
||||
/* Search all ten digits of this level. */
|
||||
for (n = 0; n < 10; ++n)
|
||||
{
|
||||
if (wc == wcdigits[n])
|
||||
if (wc == *wcdigits[n])
|
||||
{
|
||||
/* Found it. */
|
||||
if (*decided == -1)
|
||||
|
@ -1,17 +1,103 @@
|
||||
97ec3e0e5a02ba50bf034cfcdea6469d locales/POSIX
|
||||
2ac9c8dab200035ab30329e025ae29be locales/af_ZA
|
||||
dc560d0dd71ca1cf4b3a3f422fe03b14 locales/ca_ES
|
||||
e2b2c79ac083d3c7151e9ede9360f6c0 locales/cs_CZ
|
||||
6ed0464590918f9b59731ea8b762900d locales/da_DK
|
||||
3c1e78eeb968fa5ef49b2672fe3da756 locales/de_AT
|
||||
6ee0be7a3b0033b35719419a9d84b27f locales/de_BE
|
||||
89ff8fb9bb9d2ea2fbfd409baccd7f59 locales/de_CH
|
||||
693b60488445f63d15207cd407884345 locales/de_DE
|
||||
969062eb7dd2196ae96c26b837f77591 locales/de_LU
|
||||
9a10c3ac70ab2d0d26ea2e8921199665 locales/el_GR
|
||||
1df05f9450263138fd5d4ee513642310 locales/en_AU
|
||||
0271ab37e58ddb29733ab3f89789f10c locales/en_BW
|
||||
bafe0469ff4621636a90e72acebb6f93 locales/en_CA
|
||||
688ec6a92b152ec3dfad2c52d7fd61ea locales/en_CA,2.5
|
||||
172ca6f82d8dfb3edd86ddf51e157a1e locales/en_DK
|
||||
94cd32fd51aa57d42255b9aa8ab7cee3 locales/en_DK.com
|
||||
8f322dd28903682c6a80a4a96861dc59 locales/en_GB
|
||||
aee81bf8761ef1e38f6adc39e5846b17 locales/en_IE
|
||||
e6accbc3458eba9e23156e99ce700439 locales/en_NZ
|
||||
e7e3223904043d185087bbb13bbc6e97 locales/en_US
|
||||
21fd1816ee6f32b6777d90222d660be3 locales/en_ZA
|
||||
d82de853fcd448dfd1a7e5d2bb114daf locales/en_ZW
|
||||
b2f02bb97de06de5a14bb4cc11877ad7 locales/es_AR
|
||||
41630e6e8f5a164fa90e10b202cc3eaf locales/es_BO
|
||||
b21ac1fea9726a62d7306d63e646c990 locales/es_CL
|
||||
8e3752256da403c9a9d66680deed45c8 locales/es_CO
|
||||
915aa3b6b7c73ffa00ceda87b8589495 locales/es_DO
|
||||
01175f59670c47e8bb62553c62d480ee locales/es_EC
|
||||
c9df76a675c75ab0000057ffcf826aee locales/es_ES
|
||||
0085a8fee4c77cfa02e5b2a700fa30d4 locales/es_GT
|
||||
de8e51deed4c7bf897cf886fea7772d6 locales/es_HN
|
||||
e07278e9fb181fd32e1a89f2025a43b7 locales/es_MX
|
||||
0f4c8e46eb4790f598137678ace1887c locales/es_PA
|
||||
15decb57c2ce997e76e6c5c217c44d1d locales/es_PE
|
||||
1e7d8a5c9f0abb506e3b7128a3f28980 locales/es_PY
|
||||
69dd105d588ef12726c51735d94e2d59 locales/es_SV
|
||||
97c3c0374bdd90fba624e0aa46bdb745 locales/es_US
|
||||
e24d7f66ec0f5fbbca742be937d680b5 locales/es_UY
|
||||
05d4a96a70ccaecd3472a1e9b40db513 locales/es_VE
|
||||
55b992cdb4b9adf72df968881a55045c locales/et_EE
|
||||
4d85ff4728e48450e1ae4f371c1fd12e locales/eu_ES
|
||||
b921bf84d560d5ab06111807981748e9 locales/fa_IR
|
||||
7fc821e07d7e228535dcc2b6c4fce8f1 locales/fi_FI
|
||||
35d631cc21c7cc9d1ce2933e1d94d81a locales/fo_FO
|
||||
419d0507292b954a0cee5be020771b00 locales/fr_BE
|
||||
d9e85f9c1dc5d2d9396afac293f0553c locales/fr_CA
|
||||
c1836dfa41f6eb43dc90900d2cd9b341 locales/fr_CA,2.13
|
||||
47b866d8e108070ebc393f18e5a11618 locales/fr_CH
|
||||
1d63fde6acfdc6c0dc03b36098a9f5ab locales/fr_FR
|
||||
8c17257001e3d33e8ab8c5dc9fae87a7 locales/fr_LU
|
||||
fe6ba034da4ce416f480a11a0b1f7356 locales/ga_IE
|
||||
37dc43894af12d76a399af38ec3b848e locales/gl_ES
|
||||
e5730342b747e9445b6448792d39d121 locales/he_IL
|
||||
8264c2cdffbead098d797ea1d861753f locales/hr_HR
|
||||
70ea8a47c5e1ea1af40fe059795108f6 locales/hu_HU
|
||||
0d145a65dfa353f93f78090719cb086d locales/id_ID
|
||||
d1089f83e82d9ea9256a82cd4b883a72 locales/in_ID
|
||||
c96cc2c4f753f6641d2744eb762dc4e3 locales/is_IS
|
||||
48252394b6e3f50cfcf00510eacd3683 locales/it_CH
|
||||
69b619bf7fad926c3c04349f1a316d0d locales/it_IT
|
||||
e5730342b747e9445b6448792d39d121 locales/iw_IL
|
||||
934faede9009fc486fc7453c16084aba locales/ja_JP
|
||||
2f97cb36f71528ce4dda636ddb96d0c5 locales/kl_GL
|
||||
880237172b8700c9645dd0cee6ad3a59 locales/ko_KR
|
||||
c7e3b3446446aa0e9fcc6dd1bdee6a5d locales/lt_LT
|
||||
b93e2cb7a11c1fbd22d0427aab4922d0 locales/lv_LV
|
||||
5be9df64a7bf8669701f0f9983dc1004 locales/nl_BE
|
||||
4d58de18535a2e1f98e6985d4fa5b671 locales/nl_NL
|
||||
ed41a02e1c2aec4eddc42fe7b5702bf4 locales/no_NO
|
||||
83bf7b71dd5b09e267d9e69d37bc8883 locales/pl_PL
|
||||
7e40f55558927e1754744a5b705d5089 locales/pt_BR
|
||||
3ed6e5080462030ceb847ef241ee1352 locales/pt_PT
|
||||
33324d57567944135cadec56b4b1e77d locales/ro_RO
|
||||
b4e8ac2dea2a3c736befb854c4edf45b locales/ru_RU
|
||||
2be354a9d753a14159067f4e98437bb4 locales/ru_UA
|
||||
e138da41f8586445c277a761ca2fc7df locales/sk_SK
|
||||
18408da663b6c4498c06d844ef14ae1b locales/sl_SI
|
||||
d1aefa7d8bb6354743b0e386fcbb0652 locales/sr_YU
|
||||
2c1087e408f00e70320ca5e4efd80617 locales/sv_FI
|
||||
c4e59d821962d68097175242220427ea locales/sv_SE
|
||||
669ade381cccccd0a3fac10bec9a2917 locales/th_TH
|
||||
f9ac3ea566e659cdcbc6dde43d7655fd locales/tr_TR
|
||||
d10211b77b9c19fd04080e9df5b03bf5 locales/uk_UA
|
||||
d3d797491b67d7207ea1bf00204515d2 locales/zh_CN
|
||||
0e7fdb8285e9ca6113454ce247d3863c charmaps/ANSI_X3.110-1983
|
||||
a586da90c49cd6875b8238a8878a7591 charmaps/ANSI_X3.4-1968
|
||||
5f18526bbba0326cf6af1861bcac141f charmaps/ASMO_449
|
||||
a9f7051d90b3cd83bc0ad8bd7bae0b02 charmaps/BALTIC
|
||||
8e1e15a295bd169737f22dc53f08ab0b charmaps/BS_4730
|
||||
93f30925bb39086d37e66e4d185ec84b charmaps/BS_VIEWDATA
|
||||
41d1dc3ded4f1e379fa92bd3fcf5c35d charmaps/CP1250
|
||||
de9e81aa6857f6904b8d8e48e199151b charmaps/CP1251
|
||||
4295ced14d537e63d55c27a50f60fd65 charmaps/CP1252
|
||||
97bd97f3ca917489edfa63dbd3977255 charmaps/CP1253
|
||||
20cb2f279747e4f892f793b7ee0055c2 charmaps/CP1254
|
||||
a7a5467df241ffb55f8247bbf9f12ad5 charmaps/CP1255
|
||||
7d5cfac2ef35027f4c634cba8c43b4cc charmaps/CP1256
|
||||
a8dc97d22ade3ee0a8cd8c7122bd4f18 charmaps/CP1257
|
||||
a907a00ba93ea9f46154cf3a80818e70 charmaps/CP1250
|
||||
2a92a00cd906127843d519aa937bf0c9 charmaps/CP1251
|
||||
10e2330202c5b24766d4d04ec46a56c1 charmaps/CP1252
|
||||
e26ab9843d95b3d200d94cf76981d09d charmaps/CP1253
|
||||
c31e2cbcee34f148786ca38c0a5570d2 charmaps/CP1254
|
||||
0c8a06d02ed67967129d6f7496d24b15 charmaps/CP1255
|
||||
f861218a23625c411f6e736e9ae7a6fa charmaps/CP1256
|
||||
bb9b52bfe2d51434c2d02755153ad215 charmaps/CP1257
|
||||
a6497ae372e62cc7b92c3cfd33efd5a0 charmaps/CP1258
|
||||
de28dafcea25942068f985ed626f2dc8 charmaps/CSA_Z243.4-1985-1
|
||||
052ef075f60624efa6e802e91410b47e charmaps/CSA_Z243.4-1985-2
|
||||
06e1bab71c5bb639445d86075cf7cef4 charmaps/CSA_Z243.4-1985-GR
|
||||
@ -39,6 +125,9 @@ b2f02a121a48a3ac110bd6ee5263fd9b charmaps/EBCDIC-US
|
||||
ac706419ebd1e3a649fb681312ac8ce5 charmaps/ECMA-CYRILLIC
|
||||
7dddc0b7992cd333434b8a02959c50a0 charmaps/ES
|
||||
4c0b61e790c2d2470516111e1d2aa319 charmaps/ES2
|
||||
d0eb42459f3bfa8a576579d74f10f3fd charmaps/EUC-JP
|
||||
729b91a542fbf5f30a2e16258f21ceaf charmaps/EUC-KR
|
||||
20bb289e25334344a0662470db3e9a8c charmaps/GB2312
|
||||
a135f498373b1305167f1a6c699949a2 charmaps/GB_1988-80
|
||||
1e1e94ad8d1c12e9f10f7d6e1d870a68 charmaps/GOST_19768-74
|
||||
69a174dec8822dedba8b8aad36ba44df charmaps/GREEK-CCITT
|
||||
@ -65,24 +154,25 @@ aa42a6d193da334341f83f5783e88346 charmaps/IBM285
|
||||
6f33fae170d1d8f2e8805598a5d9faec charmaps/IBM420
|
||||
8b156f73e652c2d61b7ccd6a87f9a8ed charmaps/IBM423
|
||||
66042b458fb9ab18f17b10c8f28f6e36 charmaps/IBM424
|
||||
b634bac1501c18318edd0f3933b384a2 charmaps/IBM437
|
||||
b7dbbe944c14f37b99c88589ce23f4f6 charmaps/IBM437
|
||||
fbfeade12b636f330ae301c8c4889066 charmaps/IBM500
|
||||
14624459eeab649848449d0e3f83acc1 charmaps/IBM850
|
||||
c758668ec74757819130a3fe0dc0c360 charmaps/IBM851
|
||||
c1788b0d0c362ad15d23ebe5aaeb035c charmaps/IBM852
|
||||
2d3e765198279a53a3d9488b37facf2a charmaps/IBM855
|
||||
cbb9a7e1fb92bc16aeef5d3f63027e2f charmaps/IBM857
|
||||
5314bd045aea2814c576924e27013670 charmaps/IBM860
|
||||
cf51cf4947729270615891be457c327b charmaps/IBM861
|
||||
c401a334989aad1355a558387ba834fd charmaps/IBM862
|
||||
5755062fc1ca9f6a6a2b5ba7eadf72af charmaps/IBM863
|
||||
1cbd4090174eb65cbf8b60d75286d0d2 charmaps/IBM864
|
||||
1bd1fd420dc3dea9a8ac7b1757916412 charmaps/IBM865
|
||||
54077be5b5a5ded48c5371fde65aacd3 charmaps/IBM866
|
||||
381e89c44f3563c165cad5649818f7e2 charmaps/IBM855
|
||||
9b8ee5f11d59b7ceb3714eb1448d9793 charmaps/IBM857
|
||||
32c16fd20b3fb11b92bb12e14de90825 charmaps/IBM860
|
||||
bc2e6b784e155a42c3329cb7b23cd653 charmaps/IBM861
|
||||
759ef63f459acb00c54fafed06b52fa3 charmaps/IBM862
|
||||
d663303a0f58dab4a6eb28a66a64b94e charmaps/IBM863
|
||||
754b798ba5e75bc05fd2171f425261ed charmaps/IBM864
|
||||
b6a61bfb10e0e97b6e6acfa85b974e54 charmaps/IBM865
|
||||
a97d1ae5b7e1042e9fd64b25ed471f40 charmaps/IBM866
|
||||
3c687466bbe8924d247de33aefc3b39c charmaps/IBM868
|
||||
a4a9721bce720a8c24b3130dba84347d charmaps/IBM869
|
||||
25a012edcc641079a92e48b7daaefb6c charmaps/IBM869
|
||||
f06c133a6a95e36ed4bfd25def526769 charmaps/IBM870
|
||||
3484dd8f95b187e5875dc73278485dd5 charmaps/IBM871
|
||||
549df48822f4d8c00e36ecd8ac12dad2 charmaps/IBM874
|
||||
2ac060b9d24b0627a69edaf9c8f9b20f charmaps/IBM875
|
||||
526e51ad0ce04ad9700b6444e83d4331 charmaps/IBM880
|
||||
d594cb73e9deddfbacf403223a39415e charmaps/IBM891
|
||||
@ -95,22 +185,25 @@ b620d1383e848c22e993d83c929d4e2c charmaps/IEC_P27-1
|
||||
698eb5f931a6378ec100988b2e7080f8 charmaps/INIS-8
|
||||
3355267d5b626e15335bc3d9e9ceecec charmaps/INIS-CYRILLIC
|
||||
82997b03c60b1c75db7c684369afa784 charmaps/INVARIANT
|
||||
f6ec68e3fa6e6a32ce569a11b3053b6a charmaps/ISO-8859-1
|
||||
a2dd10c556673a29a78ab36f03bf790b charmaps/ISO-8859-10
|
||||
de357baff38cd0006a4b0b5a747de751 charmaps/ISO-8859-13
|
||||
3d44651d05855f6c2b14fc71e0c89a1c charmaps/ISO-8859-14
|
||||
d3235d59344cfbbb418e11d0bcc4bb65 charmaps/ISO-8859-15
|
||||
f73101f88ab99ae54aab390a39e37bd2 charmaps/ISIRI-3342
|
||||
00278485a2b71756393bdaff1d475f09 charmaps/ISO-8859-1
|
||||
97daa5d07db924785235076958fd0cf4 charmaps/ISO-8859-10
|
||||
65b513f374f59ab6c3065f6cabac073a charmaps/ISO-8859-13
|
||||
7a53d1853f07c116e8ceaac4b42c10f4 charmaps/ISO-8859-14
|
||||
291de15c8b16692c49cd7cbacf88c47a charmaps/ISO-8859-15
|
||||
b5aeeb41514765d0c6d59e209e34b489 charmaps/ISO-8859-16
|
||||
eb0956b77262e50119b476b8a7266ee7 charmaps/ISO-8859-2
|
||||
5f4b7f0d6d3123a5928f83d13b15b8ef charmaps/ISO-8859-3
|
||||
43a6fbbc2c730598a4c9924a4caf1a5a charmaps/ISO-8859-4
|
||||
cf08296dd3226cb37c14faf45e7bf7e0 charmaps/ISO-8859-5
|
||||
2aa504f779ecaa9b1ed1bd2095f9b690 charmaps/ISO-8859-6
|
||||
ae6d8c251216bd6d062fa97738ec043e charmaps/ISO-8859-7
|
||||
0fb1c5a4c1e86155ed868ef4365d5b31 charmaps/ISO-8859-8
|
||||
7aaf7cf69626b0db87314ec8b6f9a2c9 charmaps/ISO-8859-7
|
||||
e8820ebb915620714fe103155cd5429c charmaps/ISO-8859-8
|
||||
172863abae066ff434fdde13bfcbdf74 charmaps/ISO-8859-9
|
||||
1b37bc4d952af81b97fdf412e0c09acc charmaps/ISO-IR-90
|
||||
7f859ae24e0921d1ed24e9415865c20f charmaps/ISO-IR-197
|
||||
35a007ff10462707262fddeaaed09a79 charmaps/ISO-IR-90
|
||||
29e4042157fbde4ecf3e36d82c976c62 charmaps/ISO_10367-BOX
|
||||
b71ed28fbb5d7d62d9f3a710a34a6df4 charmaps/ISO_10646
|
||||
a2fae2a1c29554eaa27fc44b6f2448b7 charmaps/ISO_10646
|
||||
2eb96001d9520c322ec37b9a9893431b charmaps/ISO_2033-1983
|
||||
cdd74ad87b62bebded4d4f09e4b70d95 charmaps/ISO_5427
|
||||
9a0245eaeaa3542e4792462dc4167a3b charmaps/ISO_5427-EXT
|
||||
@ -136,12 +229,14 @@ f6635f62933ca73d099f7f0deabf98e2 charmaps/JIS_C6229-1984-KANA
|
||||
0ef24ee22fe2db7c269f391fcf318a25 charmaps/JUS_I.B1.003-MAC
|
||||
d9f90201c1cf81ea3e1d168720bffc83 charmaps/JUS_I.B1.003-SERB
|
||||
67d61886ea42a4f7860ac7c4e02788d3 charmaps/KOI-8
|
||||
d59998eca2cfb8f43bf0720da364d74b charmaps/KOI8-R
|
||||
7762b0e55445ff057d6d12b9d4b58858 charmaps/KOI8-R
|
||||
7e4c814f2e2237f50a8e9cb16cf972af charmaps/KOI8-U
|
||||
740a29c47cc9a64027b11dfa25c40db0 charmaps/KSC5636
|
||||
58cd9bffdffb8acea02431bc05e1cffb charmaps/KSX1001
|
||||
c4a4025dccd0b37119b9382d9f741736 charmaps/LATIN-GREEK
|
||||
5fb2c89721a7ac283154db22d6d2dce3 charmaps/LATIN-GREEK-1
|
||||
6680017c5cda54ba6b7191e9bbbbd521 charmaps/MAC-IS
|
||||
3b589dfa981564e6004cf62b137fa3fa charmaps/MAC-UK
|
||||
b4dd3b580ed4c12a00db6a92bfe704a4 charmaps/MAC-UK
|
||||
4d605d9319f35bca76db2f3adc37b186 charmaps/MACINTOSH
|
||||
447109f8043eed245396b8dfb0c5b024 charmaps/MSZ_7795.3
|
||||
1d20c917abdd4beeeba248c57e315cfa charmaps/NATS-DANO
|
||||
@ -149,91 +244,23 @@ b3bbdc3f120f8953a4f6aa642427fe15 charmaps/NATS-DANO-ADD
|
||||
6ecc9d568a7816ec1c36e671397bc62e charmaps/NATS-SEFI
|
||||
10d8bd8b95e840b9158f429ad5b9365a charmaps/NATS-SEFI-ADD
|
||||
0ecf1f5d1f3013682c36740c70a401b7 charmaps/NC_NC00-10
|
||||
2f4a07a32092af3ad9ba80327b2eee3d charmaps/NEXTSTEP
|
||||
3d0fe48348b6bc87a8b51bc14e7095f1 charmaps/NEXTSTEP
|
||||
27d205fe2bdb212ff487149378a8fb13 charmaps/NF_Z_62-010
|
||||
d867bfe77c36b2d1aeecaa3f57d9d4e1 charmaps/NF_Z_62-010-1973
|
||||
3b41e78b72c9e6ae388372250a4c2aa1 charmaps/NF_Z_62-010_(1973)
|
||||
3b41e78b72c9e6ae388372250a4c2aa1 charmaps/NF_Z_62-010_1973
|
||||
f337a4af933e8cf76ce0cbe0c3220385 charmaps/NS_4551-1
|
||||
249ccbf125a7f3ba65f981c713315518 charmaps/NS_4551-2
|
||||
c31d1e195aa38a135db258ffe9819686 charmaps/PT
|
||||
15be55c497423c88f935bc5cb0b8a8a3 charmaps/PT2
|
||||
4350bd8c8fe1e5af0c7ce81ca1cede69 charmaps/SAMI
|
||||
a32a61d30e9a82987d46c6519ba4fa1b charmaps/SAMI-WS2
|
||||
0749422e24fc635059683aab8e5cec7c charmaps/SEN_850200_B
|
||||
ba143c0073ddafb215cb977c352c51a0 charmaps/SEN_850200_C
|
||||
9785b30026d616bbda77eaf8e6153787 charmaps/T.101-G2
|
||||
1f46111983da2e6089c96fe82dac584a charmaps/T.61-7BIT
|
||||
c9cddee81fc56afc565103f0595512d8 charmaps/T.61-8BIT
|
||||
9fcdbcefc8f2945dcb3047496b6e4e1c charmaps/UTF8
|
||||
f326985c547ec318a5f898b6515b575e charmaps/TIS-620
|
||||
866ff501227eb0be777ab0311f9caadf charmaps/UTF8
|
||||
ef3bf5ae895d02eaef728a6cad19f389 charmaps/VIDEOTEX-SUPPL
|
||||
b0fc83fb2cead90248f032e287299525 locales/POSIX
|
||||
5e9f804d3c68d2a8ceab10020b2d885c locales/cs_CZ
|
||||
8084f6fe7165163028482a4f4ca52abe locales/da_DK
|
||||
3c1e78eeb968fa5ef49b2672fe3da756 locales/de_AT
|
||||
6ee0be7a3b0033b35719419a9d84b27f locales/de_BE
|
||||
89ff8fb9bb9d2ea2fbfd409baccd7f59 locales/de_CH
|
||||
1ad7034b9f3be247d0a169dff7d711bf locales/de_DE
|
||||
969062eb7dd2196ae96c26b837f77591 locales/de_LU
|
||||
a8192252431fc5fcec56ed92068da88e locales/el_GR
|
||||
1df05f9450263138fd5d4ee513642310 locales/en_AU
|
||||
bb28f2db6809e1e6064d447f509a2ede locales/en_CA
|
||||
b7bd86ec5645f4731e78bfef70bec498 locales/en_CA,2.5
|
||||
a1b0fbbd332fcb1bf7376f240a96ad6d locales/en_DK
|
||||
99a400d909a4db85570a9ab72a34c60b locales/en_DK.com
|
||||
8f322dd28903682c6a80a4a96861dc59 locales/en_GB
|
||||
aee81bf8761ef1e38f6adc39e5846b17 locales/en_IE
|
||||
e6accbc3458eba9e23156e99ce700439 locales/en_NZ
|
||||
e7e3223904043d185087bbb13bbc6e97 locales/en_US
|
||||
c09fe242a78f095ba73a572cf1d3ae51 locales/es_AR
|
||||
f00557d5abe37ecb4c4a7a0f639d83bb locales/es_BO
|
||||
dfa04a07e5020fcfbc185db523fc42f2 locales/es_CL
|
||||
02de1dc2939ca0d0e8ce22c2d4d49f88 locales/es_CO
|
||||
013a1ea40eb1a4d7313050642ed75b99 locales/es_DO
|
||||
fb3914b2ba26efc5723cd751e18fc92d locales/es_EC
|
||||
d622778a3d44e49527e0885691c8bf9f locales/es_ES
|
||||
d003b9b027005a95fd19ae213a3d47ea locales/es_GT
|
||||
b7e903bbb4b5bd59050c1948f50b3a79 locales/es_HN
|
||||
254983b73ccc9855b03119403fdaef61 locales/es_MX
|
||||
2b61af6b007a1af4c31ea5ca8a9e3179 locales/es_PA
|
||||
95bc5dacc650bfa7b0d258ae749db9b5 locales/es_PE
|
||||
0f0db099f11bd5badd07af16c1a8ce65 locales/es_PY
|
||||
8fd678bf1f3fc81d8124d54b83604793 locales/es_SV
|
||||
ca950a3717ca14b9fd7b174cb3be0205 locales/es_US
|
||||
8bdf81518fb86575d754e46de5a5c0aa locales/es_UY
|
||||
d2459a575f09c4ade4a50e4280356f89 locales/es_VE
|
||||
57fb2876beb2e100e09174f45918ac9b locales/et_EE
|
||||
4d85ff4728e48450e1ae4f371c1fd12e locales/eu_ES
|
||||
5c6df7ae14e499da97da67545d346a94 locales/fi_FI
|
||||
35d631cc21c7cc9d1ce2933e1d94d81a locales/fo_FO
|
||||
419d0507292b954a0cee5be020771b00 locales/fr_BE
|
||||
d9e85f9c1dc5d2d9396afac293f0553c locales/fr_CA
|
||||
50e86eff16c0c9eb52e00a936227966d locales/fr_CA,2.13
|
||||
47b866d8e108070ebc393f18e5a11618 locales/fr_CH
|
||||
1d63fde6acfdc6c0dc03b36098a9f5ab locales/fr_FR
|
||||
8c17257001e3d33e8ab8c5dc9fae87a7 locales/fr_LU
|
||||
fe6ba034da4ce416f480a11a0b1f7356 locales/ga_IE
|
||||
e5730342b747e9445b6448792d39d121 locales/he_IL
|
||||
1291e71feb2a02bf24717857c936ad16 locales/hr_HR
|
||||
0b21f01202e6ca3de0835191205c54ab locales/hu_HU
|
||||
2325701702c17598f3a4e1321da6d84b locales/is_IS
|
||||
69b619bf7fad926c3c04349f1a316d0d locales/it_IT
|
||||
e5730342b747e9445b6448792d39d121 locales/iw_IL
|
||||
a0b6e1db02c80fe09efab5acadbeeb62 locales/ja_JP
|
||||
2f97cb36f71528ce4dda636ddb96d0c5 locales/kl_GL
|
||||
a91489780f5bbdb6b3e570804fb38df7 locales/lt_LT
|
||||
1be844bb3bc266422ee1c6352ac8c12e locales/lv_LV
|
||||
5be9df64a7bf8669701f0f9983dc1004 locales/nl_BE
|
||||
4d58de18535a2e1f98e6985d4fa5b671 locales/nl_NL
|
||||
0159a137296be5f7e776feabec45b768 locales/no_NO
|
||||
6b255224747ac5d764fcf23f6cca86b4 locales/pl_PL
|
||||
7e40f55558927e1754744a5b705d5089 locales/pt_BR
|
||||
3ed6e5080462030ceb847ef241ee1352 locales/pt_PT
|
||||
92d78ef516c5e6c188acf575dc288a88 locales/ro_RO
|
||||
7d775a1146a075d0222e0fe0be7fbb3e locales/ru_RU
|
||||
ac0344e42ac61764b7013244bc9c3532 locales/ru_SU
|
||||
e138da41f8586445c277a761ca2fc7df locales/sk_SK
|
||||
c82e1d2468d3e268aa33606f75aa69b5 locales/sl_SI
|
||||
b1146c25b2827502bc08c5cdb05da5e3 locales/sr_YU
|
||||
2c1087e408f00e70320ca5e4efd80617 locales/sv_FI
|
||||
45c64c2c790971d5377890de2002f933 locales/sv_SE
|
||||
87c0290784eb817f78bfa38b6a390b3b locales/tr_TR
|
||||
4b5befa44f25c973d70b1f49887ea169 locales/zh_CN
|
||||
d8b499f15cb60ae79eb30a5fddc46826 repertoiremaps/charids.894
|
||||
471cbc9b5fc329e2de0439c53bf15632 repertoiremaps/mnemonic.ds
|
||||
fb66d6b898b399e9a3ba9dc37d77e167 repertoiremaps/mnemonic.ja
|
||||
|
@ -46,7 +46,8 @@ ld-test-srcs := $(addprefix tests/,$(addsuffix .cm,$(ld-test-names)) \
|
||||
$(addsuffix .def,$(ld-test-names)))
|
||||
|
||||
generated := $(test-input) $(test-output)
|
||||
generated-dirs := $(basename $(test-input)) en_US $(ld-test-names) tt_TT
|
||||
generated-dirs := $(basename $(test-input)) en_US $(ld-test-names) tt_TT\
|
||||
de_DE.437
|
||||
|
||||
distribute := CHECKSUMS README SUPPORTED ChangeLog \
|
||||
$(charmaps) $(locales) $(repertoiremaps) \
|
||||
|
@ -298,7 +298,7 @@ CHARMAP
|
||||
<aH-> /xC3 <UFE83> ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
|
||||
<wH-> /xC4 <UFE85> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
|
||||
<e+.> /xC5 <UFECA> ARABIC LETTER AIN FINAL FORM
|
||||
<yH,> /xC6 <UFE8D> ARABIC LETTER ALEF ISOLATED FORM
|
||||
<yH,> /xC6 <UFE8B> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
|
||||
<a+-> /xC7 <UFE8D> ARABIC LETTER ALEF ISOLATED FORM
|
||||
<b+,> /xC8 <UFE91> ARABIC LETTER BEH INITIAL FORM
|
||||
<tm-> /xC9 <UFE93> ARABIC LETTER TEH MARBUTA ISOLATED FORM
|
||||
|
@ -184,7 +184,7 @@ CHARMAP
|
||||
<NO> /xAC <U00AC> NOT SIGN
|
||||
<--> /xAD <U00AD> SOFT HYPHEN
|
||||
<Rg> /xAE <U00AE> REGISTERED SIGN
|
||||
<'-> /xAF <U203E> OVERLINE
|
||||
<'m> /xAF <U00AF> MACRON
|
||||
<DG> /xB0 <U00B0> DEGREE SIGN
|
||||
<+-> /xB1 <U00B1> PLUS-MINUS SIGN
|
||||
<2S> /xB2 <U00B2> SUPERSCRIPT TWO
|
||||
@ -228,6 +228,8 @@ CHARMAP
|
||||
<R+> /xF8 <U05E8> HEBREW LETTER RESH
|
||||
<Sh> /xF9 <U05E9> HEBREW LETTER SHIN
|
||||
<T+> /xFA <U05EA> HEBREW LETTER TAV
|
||||
<LR> /xFD <U200E> LEFT-TO-RIGHT MARK
|
||||
<RL> /xFE <U200F> RIGHT-TO-LEFT MARK
|
||||
<NUL> /x00 <U0000> NUL
|
||||
<SOH> /x01 <U0001> START OF HEADING (SOH)
|
||||
<STX> /x02 <U0002> START OF TEXT (STX)
|
||||
|
@ -497,5 +497,5 @@ CHARMAP
|
||||
<vertical-line> /x7C <U007C> VERTICAL LINE
|
||||
<right-brace> /x7D <U007D> RIGHT CURLY BRACKET
|
||||
<right-curly-bracket> /x7D <U007D> RIGHT CURLY BRACKET
|
||||
<tilde> /x20 <U007E> TILDE
|
||||
<tilde> /xC4/x20 <U007E> TILDE
|
||||
END CHARMAP
|
||||
|
@ -176,8 +176,11 @@ CHARMAP
|
||||
<f2> /xA6 <U0192> LATIN SMALL LETTER F WITH HOOK
|
||||
<SE> /xA7 <U00A7> SECTION SIGN
|
||||
<Cu> /xA8 <U00A4> CURRENCY SIGN
|
||||
<'9> /xA9 <U2019> RIGHT SINGLE QUOTATION MARK
|
||||
<"6> /xAA <U201C> LEFT DOUBLE QUOTATION MARK
|
||||
<<<> /xAB <U00AB> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||
<<1> /xAC <U2039> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
||||
</>1> /xAD <U203A> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
||||
<fi> /xAE <UFB01> LATIN SMALL LIGATURE FI
|
||||
<fl> /xAF <UFB02> LATIN SMALL LIGATURE FL
|
||||
<Rg> /xB0 <U00AE> REGISTERED SIGN
|
||||
@ -188,6 +191,8 @@ CHARMAP
|
||||
<BB> /xB5 <U00A6> BROKEN BAR
|
||||
<PI> /xB6 <U00B6> PILCROW SIGN
|
||||
<sb> /xB7 <U2022> BULLET
|
||||
<.9> /xB8 <U201A> SINGLE LOW-9 QUOTATION MARK
|
||||
<:9> /xB9 <U201E> DOUBLE LOW-9 QUOTATION MARK
|
||||
<"9> /xBA <U201D> RIGHT DOUBLE QUOTATION MARK
|
||||
</>/>> /xBB <U00BB> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||
<.3> /xBC <U2026> HORIZONTAL ELLIPSIS
|
||||
|
@ -325,7 +325,8 @@ closelog ()
|
||||
|
||||
closelog_internal ();
|
||||
LogTag = NULL;
|
||||
|
||||
LogType = SOCK_DGRAM; /* this is the default */
|
||||
|
||||
/* Free the lock. */
|
||||
__libc_cleanup_region_end (1);
|
||||
}
|
||||
|
@ -149,6 +149,7 @@ parse_one_spec (const UCHAR_T *format, size_t posn, struct printf_spec *spec,
|
||||
spec->info.showsign = 0;
|
||||
spec->info.group = 0;
|
||||
spec->info.pad = ' ';
|
||||
spec->info.wide = sizeof (UCHAR_T) > 1;
|
||||
|
||||
/* Test for positional argument. */
|
||||
if (ISDIGIT (*format))
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Floating point output for `printf'.
|
||||
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.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
@ -51,18 +51,18 @@
|
||||
/* This defines make it possible to use the same code for GNU C library and
|
||||
the GNU I/O library. */
|
||||
#ifdef USE_IN_LIBIO
|
||||
# define PUT(f, s, n) _IO_sputn (f, s, n)
|
||||
# define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : _IO_padn (f, c, n))
|
||||
# define PUT(f, s, n) _IO_sputn (f, s, n)
|
||||
# define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : _IO_padn (f, c, n))
|
||||
/* We use this file GNU C library and GNU I/O library. So make
|
||||
names equal. */
|
||||
# undef putc
|
||||
# define putc(c, f) (wide \
|
||||
# undef putc
|
||||
# define putc(c, f) (wide \
|
||||
? _IO_putwc_unlocked (c, f) : _IO_putc_unlocked (c, f))
|
||||
# define size_t _IO_size_t
|
||||
# define FILE _IO_FILE
|
||||
# define size_t _IO_size_t
|
||||
# define FILE _IO_FILE
|
||||
#else /* ! USE_IN_LIBIO */
|
||||
# define PUT(f, s, n) fwrite (s, 1, n, f)
|
||||
# define PAD(f, c, n) __printf_pad (f, c, n)
|
||||
# define PUT(f, s, n) fwrite (s, 1, n, f)
|
||||
# define PAD(f, c, n) __printf_pad (f, c, n)
|
||||
ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c. */
|
||||
#endif /* USE_IN_LIBIO */
|
||||
|
||||
@ -77,21 +77,25 @@ ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c. */
|
||||
++done; \
|
||||
} while (0)
|
||||
|
||||
#define PRINT(ptr, len) \
|
||||
#define PRINT(ptr, wptr, len) \
|
||||
do \
|
||||
{ \
|
||||
register size_t outlen = (len); \
|
||||
if (len > 20) \
|
||||
{ \
|
||||
if (PUT (fp, ptr, outlen) != outlen) \
|
||||
if (PUT (fp, wide ? (const char *) wptr : ptr, outlen) != outlen) \
|
||||
return -1; \
|
||||
ptr += outlen; \
|
||||
done += outlen; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*ptr++); \
|
||||
if (wide) \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*wptr++); \
|
||||
else \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*ptr++); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
@ -125,11 +129,12 @@ extern mp_size_t __mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size,
|
||||
int *expt, int *is_neg,
|
||||
long double value);
|
||||
extern unsigned int __guess_grouping (unsigned int intdig_max,
|
||||
const char *grouping, wchar_t sepchar);
|
||||
const char *grouping);
|
||||
|
||||
|
||||
static char *group_number (char *buf, char *bufend, unsigned int intdig_no,
|
||||
const char *grouping, wchar_t thousands_sep)
|
||||
static wchar_t *group_number (wchar_t *buf, wchar_t *bufend,
|
||||
unsigned int intdig_no, const char *grouping,
|
||||
wchar_t thousands_sep, int ngroups)
|
||||
internal_function;
|
||||
|
||||
|
||||
@ -147,14 +152,17 @@ __printf_fp (FILE *fp,
|
||||
fpnum;
|
||||
|
||||
/* Locale-dependent representation of decimal point. */
|
||||
wchar_t decimal;
|
||||
const char *decimal;
|
||||
wchar_t decimalwc;
|
||||
|
||||
/* Locale-dependent thousands separator and grouping specification. */
|
||||
wchar_t thousands_sep;
|
||||
const char *thousands_sep = NULL;
|
||||
wchar_t thousands_sepwc = 0;
|
||||
const char *grouping;
|
||||
|
||||
/* "NaN" or "Inf" for the special cases. */
|
||||
const char *special = NULL;
|
||||
const wchar_t *wspecial = NULL;
|
||||
|
||||
/* We need just a few limbs for the input before shifting to the right
|
||||
position. */
|
||||
@ -178,7 +186,7 @@ __printf_fp (FILE *fp,
|
||||
MPN_VAR(tmp);
|
||||
|
||||
/* Digit which is result of last hack_digit() call. */
|
||||
int digit;
|
||||
wchar_t digit;
|
||||
|
||||
/* The type of output format that will be used: 'e'/'E' or 'f'. */
|
||||
int type;
|
||||
@ -192,7 +200,7 @@ __printf_fp (FILE *fp,
|
||||
/* Nonzero if this is output on a wide character stream. */
|
||||
int wide = info->wide;
|
||||
|
||||
char hack_digit (void)
|
||||
wchar_t hack_digit (void)
|
||||
{
|
||||
mp_limb_t hi;
|
||||
|
||||
@ -222,7 +230,7 @@ __printf_fp (FILE *fp,
|
||||
/* We're not prepared for an mpn variable with zero
|
||||
limbs. */
|
||||
fracsize = 1;
|
||||
return '0' + hi;
|
||||
return L'0' + hi;
|
||||
}
|
||||
}
|
||||
|
||||
@ -231,35 +239,24 @@ __printf_fp (FILE *fp,
|
||||
frac[fracsize++] = cy;
|
||||
}
|
||||
|
||||
return '0' + hi;
|
||||
return L'0' + hi;
|
||||
}
|
||||
|
||||
|
||||
/* Figure out the decimal point character. */
|
||||
if (info->extra == 0)
|
||||
{
|
||||
mbstate_t state;
|
||||
|
||||
memset (&state, '\0', sizeof (state));
|
||||
if (__mbrtowc (&decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
|
||||
strlen (_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT)),
|
||||
&state) <= 0)
|
||||
decimal = (wchar_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
|
||||
decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
|
||||
decimalwc = _NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_DECIMAL_POINT_WC);
|
||||
}
|
||||
else
|
||||
{
|
||||
mbstate_t state;
|
||||
|
||||
memset (&state, '\0', sizeof (state));
|
||||
if (__mbrtowc (&decimal, _NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT),
|
||||
strlen (_NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT)),
|
||||
&state) <= 0)
|
||||
decimal = (wchar_t) *_NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT);
|
||||
decimal = _NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT);
|
||||
decimalwc = _NL_CURRENT_WORD (LC_MONETARY,
|
||||
_NL_MONETARY_DECIMAL_POINT_WC);
|
||||
}
|
||||
/* Give default value. */
|
||||
if (decimal == L'\0')
|
||||
decimal = L'.';
|
||||
|
||||
/* The decimal point character must not be zero. */
|
||||
assert (*decimal != L'\0');
|
||||
|
||||
if (info->group)
|
||||
{
|
||||
@ -273,34 +270,33 @@ __printf_fp (FILE *fp,
|
||||
else
|
||||
{
|
||||
/* Figure out the thousands separator character. */
|
||||
if (info->extra == 0)
|
||||
if (wide)
|
||||
{
|
||||
mbstate_t state;
|
||||
|
||||
memset (&state, '\0', sizeof (state));
|
||||
if (__mbrtowc (&thousands_sep, _NL_CURRENT (LC_NUMERIC,
|
||||
THOUSANDS_SEP),
|
||||
strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP)),
|
||||
&state) <= 0)
|
||||
thousands_sep = (wchar_t) *_NL_CURRENT (LC_NUMERIC,
|
||||
THOUSANDS_SEP);
|
||||
if (info->extra == 0)
|
||||
thousands_sepwc =
|
||||
_NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_THOUSANDS_SEP_WC);
|
||||
else
|
||||
thousands_sepwc =
|
||||
_NL_CURRENT_WORD (LC_MONETARY,
|
||||
_NL_MONETARY_THOUSANDS_SEP_WC);
|
||||
}
|
||||
else
|
||||
{
|
||||
mbstate_t state;
|
||||
|
||||
memset (&state, '\0', sizeof (state));
|
||||
if (__mbrtowc (&thousands_sep, _NL_CURRENT (LC_MONETARY,
|
||||
MON_THOUSANDS_SEP),
|
||||
strlen (_NL_CURRENT (LC_MONETARY,
|
||||
MON_THOUSANDS_SEP)),
|
||||
&state) <= 0)
|
||||
thousands_sep = (wchar_t) *_NL_CURRENT (LC_MONETARY,
|
||||
MON_THOUSANDS_SEP);
|
||||
if (info->extra == 0)
|
||||
thousands_sep = _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
|
||||
else
|
||||
thousands_sep = _NL_CURRENT (LC_MONETARY, MON_THOUSANDS_SEP);
|
||||
}
|
||||
|
||||
if (thousands_sep == L'\0')
|
||||
if ((wide && thousands_sepwc == L'\0')
|
||||
|| (! wide && *thousands_sep == '\0'))
|
||||
grouping = NULL;
|
||||
else if (thousands_sepwc == L'\0')
|
||||
/* If we are printing multibyte characters and there is a
|
||||
multibyte representation for the thousands separator,
|
||||
we must ensure the wide character thousands separator
|
||||
is available, even if it is fake. */
|
||||
thousands_sepwc = 0xfffffffe;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -315,12 +311,30 @@ __printf_fp (FILE *fp,
|
||||
/* Check for special values: not a number or infinity. */
|
||||
if (__isnanl (fpnum.ldbl))
|
||||
{
|
||||
special = isupper (info->spec) ? "NAN" : "nan";
|
||||
if (isupper (info->spec))
|
||||
{
|
||||
special = "NAN";
|
||||
wspecial = L"NAN";
|
||||
}
|
||||
else
|
||||
{
|
||||
special = "nan";
|
||||
wspecial = L"nan";
|
||||
}
|
||||
is_neg = 0;
|
||||
}
|
||||
else if (__isinfl (fpnum.ldbl))
|
||||
{
|
||||
special = isupper (info->spec) ? "INF" : "inf";
|
||||
if (isupper (info->spec))
|
||||
{
|
||||
special = "INF";
|
||||
wspecial = L"INF";
|
||||
}
|
||||
else
|
||||
{
|
||||
special = "inf";
|
||||
wspecial = L"inf";
|
||||
}
|
||||
is_neg = fpnum.ldbl < 0;
|
||||
}
|
||||
else
|
||||
@ -341,12 +355,30 @@ __printf_fp (FILE *fp,
|
||||
/* Check for special values: not a number or infinity. */
|
||||
if (__isnan (fpnum.dbl))
|
||||
{
|
||||
special = isupper (info->spec) ? "NAN" : "nan";
|
||||
if (isupper (info->spec))
|
||||
{
|
||||
special = "NAN";
|
||||
wspecial = L"NAN";
|
||||
}
|
||||
else
|
||||
{
|
||||
special = "nan";
|
||||
wspecial = L"nan";
|
||||
}
|
||||
is_neg = 0;
|
||||
}
|
||||
else if (__isinf (fpnum.dbl))
|
||||
{
|
||||
special = isupper (info->spec) ? "INF" : "inf";
|
||||
if (isupper (info->spec))
|
||||
{
|
||||
special = "INF";
|
||||
wspecial = L"INF";
|
||||
}
|
||||
else
|
||||
{
|
||||
special = "inf";
|
||||
wspecial = L"inf";
|
||||
}
|
||||
is_neg = fpnum.dbl < 0;
|
||||
}
|
||||
else
|
||||
@ -377,7 +409,7 @@ __printf_fp (FILE *fp,
|
||||
else if (info->space)
|
||||
outchar (' ');
|
||||
|
||||
PRINT (special, 3);
|
||||
PRINT (special, wspecial, 3);
|
||||
|
||||
if (info->left && width > 0)
|
||||
PADN (' ', width);
|
||||
@ -746,7 +778,7 @@ __printf_fp (FILE *fp,
|
||||
|
||||
{
|
||||
int width = info->width;
|
||||
char *buffer, *startp, *cp;
|
||||
wchar_t *wbuffer, *wstartp, *wcp;
|
||||
int buffer_malloced;
|
||||
int chars_needed;
|
||||
int expscale;
|
||||
@ -754,6 +786,7 @@ __printf_fp (FILE *fp,
|
||||
int fracdig_min, fracdig_max, fracdig_no = 0;
|
||||
int dig_max;
|
||||
int significant;
|
||||
int ngroups = 0;
|
||||
|
||||
if (_tolower (info->spec) == 'e')
|
||||
{
|
||||
@ -811,25 +844,28 @@ __printf_fp (FILE *fp,
|
||||
}
|
||||
|
||||
if (grouping)
|
||||
/* Guess the number of groups we will make, and thus how
|
||||
many spaces we need for separator characters. */
|
||||
chars_needed += __guess_grouping (intdig_max, grouping, thousands_sep);
|
||||
{
|
||||
/* Guess the number of groups we will make, and thus how
|
||||
many spaces we need for separator characters. */
|
||||
ngroups = __guess_grouping (intdig_max, grouping);
|
||||
chars_needed += ngroups;
|
||||
}
|
||||
|
||||
/* Allocate buffer for output. We need two more because while rounding
|
||||
it is possible that we need two more characters in front of all the
|
||||
other output. If the amount of memory we have to allocate is too
|
||||
large use `malloc' instead of `alloca'. */
|
||||
buffer_malloced = chars_needed > 20000;
|
||||
buffer_malloced = chars_needed > 5000;
|
||||
if (buffer_malloced)
|
||||
{
|
||||
buffer = (char *) malloc (2 + chars_needed);
|
||||
if (buffer == NULL)
|
||||
wbuffer = (wchar_t *) malloc ((2 + chars_needed) * sizeof (wchar_t));
|
||||
if (wbuffer == NULL)
|
||||
/* Signal an error to the caller. */
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
buffer = (char *) alloca (2 + chars_needed);
|
||||
cp = startp = buffer + 2; /* Let room for rounding. */
|
||||
wbuffer = (wchar_t *) alloca ((2 + chars_needed) * sizeof (wchar_t));
|
||||
wcp = wstartp = wbuffer + 2; /* Let room for rounding. */
|
||||
|
||||
/* Do the real work: put digits in allocated buffer. */
|
||||
if (expsign == 0 || type != 'f')
|
||||
@ -838,21 +874,21 @@ __printf_fp (FILE *fp,
|
||||
while (intdig_no < intdig_max)
|
||||
{
|
||||
++intdig_no;
|
||||
*cp++ = hack_digit ();
|
||||
*wcp++ = hack_digit ();
|
||||
}
|
||||
significant = 1;
|
||||
if (info->alt
|
||||
|| fracdig_min > 0
|
||||
|| (fracdig_max > 0 && (fracsize > 1 || frac[0] != 0)))
|
||||
*cp++ = decimal;
|
||||
*wcp++ = decimalwc;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* |fp| < 1.0 and the selected type is 'f', so put "0."
|
||||
in the buffer. */
|
||||
*cp++ = '0';
|
||||
*wcp++ = L'0';
|
||||
--exponent;
|
||||
*cp++ = decimal;
|
||||
*wcp++ = decimalwc;
|
||||
}
|
||||
|
||||
/* Generate the needed number of fractional digits. */
|
||||
@ -860,8 +896,8 @@ __printf_fp (FILE *fp,
|
||||
|| (fracdig_no < fracdig_max && (fracsize > 1 || frac[0] != 0)))
|
||||
{
|
||||
++fracdig_no;
|
||||
*cp = hack_digit ();
|
||||
if (*cp != '0')
|
||||
*wcp = hack_digit ();
|
||||
if (*wcp != L'0')
|
||||
significant = 1;
|
||||
else if (significant == 0)
|
||||
{
|
||||
@ -869,16 +905,16 @@ __printf_fp (FILE *fp,
|
||||
if (fracdig_min > 0)
|
||||
++fracdig_min;
|
||||
}
|
||||
++cp;
|
||||
++wcp;
|
||||
}
|
||||
|
||||
/* Do rounding. */
|
||||
digit = hack_digit ();
|
||||
if (digit > '4')
|
||||
if (digit > L'4')
|
||||
{
|
||||
char *tp = cp;
|
||||
wchar_t *wtp = wcp;
|
||||
|
||||
if (digit == '5' && (*(cp - 1) & 1) == 0)
|
||||
if (digit == L'5' && (*(wcp - 1) & 1) == 0)
|
||||
{
|
||||
/* This is the critical case. */
|
||||
if (fracsize == 1 && frac[0] == 0)
|
||||
@ -903,31 +939,31 @@ __printf_fp (FILE *fp,
|
||||
{
|
||||
/* Process fractional digits. Terminate if not rounded or
|
||||
radix character is reached. */
|
||||
while (*--tp != decimal && *tp == '9')
|
||||
*tp = '0';
|
||||
if (*tp != decimal)
|
||||
while (*--wtp != decimalwc && *wtp == L'9')
|
||||
*wtp = '0';
|
||||
if (*wtp != decimalwc)
|
||||
/* Round up. */
|
||||
(*tp)++;
|
||||
(*wtp)++;
|
||||
}
|
||||
|
||||
if (fracdig_no == 0 || *tp == decimal)
|
||||
if (fracdig_no == 0 || *wtp == decimalwc)
|
||||
{
|
||||
/* Round the integer digits. */
|
||||
if (*(tp - 1) == decimal)
|
||||
--tp;
|
||||
if (*(wtp - 1) == decimalwc)
|
||||
--wtp;
|
||||
|
||||
while (--tp >= startp && *tp == '9')
|
||||
*tp = '0';
|
||||
while (--wtp >= wstartp && *wtp == L'9')
|
||||
*wtp = L'0';
|
||||
|
||||
if (tp >= startp)
|
||||
if (wtp >= wstartp)
|
||||
/* Round up. */
|
||||
(*tp)++;
|
||||
(*wtp)++;
|
||||
else
|
||||
/* It is more critical. All digits were 9's. */
|
||||
{
|
||||
if (type != 'f')
|
||||
{
|
||||
*startp = '1';
|
||||
*wstartp = '1';
|
||||
exponent += expsign == 0 ? 1 : -1;
|
||||
}
|
||||
else if (intdig_no == dig_max)
|
||||
@ -935,13 +971,13 @@ __printf_fp (FILE *fp,
|
||||
/* This is the case where for type %g the number fits
|
||||
really in the range for %f output but after rounding
|
||||
the number of digits is too big. */
|
||||
*--startp = decimal;
|
||||
*--startp = '1';
|
||||
*--wstartp = decimalwc;
|
||||
*--wstartp = L'1';
|
||||
|
||||
if (info->alt || fracdig_no > 0)
|
||||
{
|
||||
/* Overwrite the old radix character. */
|
||||
startp[intdig_no + 2] = '0';
|
||||
wstartp[intdig_no + 2] = L'0';
|
||||
++fracdig_no;
|
||||
}
|
||||
|
||||
@ -956,7 +992,7 @@ __printf_fp (FILE *fp,
|
||||
{
|
||||
/* We can simply add another another digit before the
|
||||
radix. */
|
||||
*--startp = '1';
|
||||
*--wstartp = L'1';
|
||||
++intdig_no;
|
||||
}
|
||||
|
||||
@ -965,7 +1001,7 @@ __printf_fp (FILE *fp,
|
||||
fractional digits. */
|
||||
if (intdig_no + fracdig_no > dig_max)
|
||||
{
|
||||
cp -= intdig_no + fracdig_no - dig_max;
|
||||
wcp -= intdig_no + fracdig_no - dig_max;
|
||||
fracdig_no -= intdig_no + fracdig_no - dig_max;
|
||||
}
|
||||
}
|
||||
@ -974,25 +1010,26 @@ __printf_fp (FILE *fp,
|
||||
|
||||
do_expo:
|
||||
/* Now remove unnecessary '0' at the end of the string. */
|
||||
while (fracdig_no > fracdig_min && *(cp - 1) == '0')
|
||||
while (fracdig_no > fracdig_min && *(wcp - 1) == L'0')
|
||||
{
|
||||
--cp;
|
||||
--wcp;
|
||||
--fracdig_no;
|
||||
}
|
||||
/* If we eliminate all fractional digits we perhaps also can remove
|
||||
the radix character. */
|
||||
if (fracdig_no == 0 && !info->alt && *(cp - 1) == decimal)
|
||||
--cp;
|
||||
if (fracdig_no == 0 && !info->alt && *(wcp - 1) == decimalwc)
|
||||
--wcp;
|
||||
|
||||
if (grouping)
|
||||
/* Add in separator characters, overwriting the same buffer. */
|
||||
cp = group_number (startp, cp, intdig_no, grouping, thousands_sep);
|
||||
wcp = group_number (wstartp, wcp, intdig_no, grouping, thousands_sepwc,
|
||||
ngroups);
|
||||
|
||||
/* Write the exponent if it is needed. */
|
||||
if (type != 'f')
|
||||
{
|
||||
*cp++ = type;
|
||||
*cp++ = expsign ? '-' : '+';
|
||||
*wcp++ = (wchar_t) type;
|
||||
*wcp++ = expsign ? L'-' : L'+';
|
||||
|
||||
/* Find the magnitude of the exponent. */
|
||||
expscale = 10;
|
||||
@ -1001,23 +1038,23 @@ __printf_fp (FILE *fp,
|
||||
|
||||
if (exponent < 10)
|
||||
/* Exponent always has at least two digits. */
|
||||
*cp++ = '0';
|
||||
*wcp++ = L'0';
|
||||
else
|
||||
do
|
||||
{
|
||||
expscale /= 10;
|
||||
*cp++ = '0' + (exponent / expscale);
|
||||
*wcp++ = L'0' + (exponent / expscale);
|
||||
exponent %= expscale;
|
||||
}
|
||||
while (expscale > 10);
|
||||
*cp++ = '0' + exponent;
|
||||
*wcp++ = L'0' + exponent;
|
||||
}
|
||||
|
||||
/* Compute number of characters which must be filled with the padding
|
||||
character. */
|
||||
if (is_neg || info->showsign || info->space)
|
||||
--width;
|
||||
width -= cp - startp;
|
||||
width -= wcp - wstartp;
|
||||
|
||||
if (!info->left && info->pad != '0' && width > 0)
|
||||
PADN (info->pad, width);
|
||||
@ -1032,14 +1069,66 @@ __printf_fp (FILE *fp,
|
||||
if (!info->left && info->pad == '0' && width > 0)
|
||||
PADN ('0', width);
|
||||
|
||||
PRINT (startp, cp - startp);
|
||||
{
|
||||
char *buffer = NULL;
|
||||
char *cp = NULL;
|
||||
|
||||
if (! wide)
|
||||
{
|
||||
/* Create the single byte string. */
|
||||
const char *decimal;
|
||||
size_t decimal_len;
|
||||
size_t thousands_sep_len;
|
||||
wchar_t *copywc;
|
||||
|
||||
if (info->extra == 0)
|
||||
decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
|
||||
else
|
||||
decimal = _NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT);
|
||||
decimal_len = strlen (decimal);
|
||||
|
||||
if (thousands_sep == NULL)
|
||||
thousands_sep_len = 0;
|
||||
else
|
||||
thousands_sep_len = strlen (thousands_sep);
|
||||
|
||||
if (buffer_malloced)
|
||||
{
|
||||
buffer = (char *) malloc (2 + chars_needed + decimal_len
|
||||
+ ngroups * thousands_sep_len);
|
||||
if (buffer == NULL)
|
||||
/* Signal an error to the caller. */
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
buffer = (char *) alloca (2 + chars_needed + decimal_len
|
||||
+ ngroups * thousands_sep_len);
|
||||
|
||||
/* Now copy the wide character string. Since the character
|
||||
(except for the decimal point and thousands separator) must
|
||||
be coming from the ASCII range we can esily convert the
|
||||
string without mapping tables. */
|
||||
for (cp = buffer, copywc = wstartp; copywc < wcp; ++copywc)
|
||||
if (*copywc == decimalwc)
|
||||
cp = (char *) __mempcpy (cp, decimal, decimal_len);
|
||||
else if (*copywc == thousands_sepwc)
|
||||
cp = (char *) __mempcpy (cp, thousands_sep, thousands_sep_len);
|
||||
else
|
||||
*cp++ = (char) *copywc;
|
||||
}
|
||||
|
||||
PRINT (buffer, wstartp, wide ? wcp - wstartp : cp - buffer);
|
||||
|
||||
/* Free the memory if necessary. */
|
||||
if (buffer_malloced)
|
||||
{
|
||||
free (buffer);
|
||||
free (wbuffer);
|
||||
}
|
||||
}
|
||||
|
||||
if (info->left && width > 0)
|
||||
PADN (info->pad, width);
|
||||
|
||||
/* Free the memory if necessary. */
|
||||
if (buffer_malloced)
|
||||
free (buffer);
|
||||
}
|
||||
return done;
|
||||
}
|
||||
@ -1048,8 +1137,7 @@ __printf_fp (FILE *fp,
|
||||
into a number with INTDIG_MAX integer digits. */
|
||||
|
||||
unsigned int
|
||||
__guess_grouping (unsigned int intdig_max, const char *grouping,
|
||||
wchar_t sepchar)
|
||||
__guess_grouping (unsigned int intdig_max, const char *grouping)
|
||||
{
|
||||
unsigned int groups;
|
||||
|
||||
@ -1087,22 +1175,21 @@ __guess_grouping (unsigned int intdig_max, const char *grouping,
|
||||
There is guaranteed enough space past BUFEND to extend it.
|
||||
Return the new end of buffer. */
|
||||
|
||||
static char *
|
||||
static wchar_t *
|
||||
internal_function
|
||||
group_number (char *buf, char *bufend, unsigned int intdig_no,
|
||||
const char *grouping, wchar_t thousands_sep)
|
||||
group_number (wchar_t *buf, wchar_t *bufend, unsigned int intdig_no,
|
||||
const char *grouping, wchar_t thousands_sep, int ngroups)
|
||||
{
|
||||
unsigned int groups = __guess_grouping (intdig_no, grouping, thousands_sep);
|
||||
char *p;
|
||||
wchar_t *p;
|
||||
|
||||
if (groups == 0)
|
||||
if (ngroups == 0)
|
||||
return bufend;
|
||||
|
||||
/* Move the fractional part down. */
|
||||
memmove (buf + intdig_no + groups, buf + intdig_no,
|
||||
bufend - (buf + intdig_no));
|
||||
wmemmove (buf + intdig_no + ngroups, buf + intdig_no,
|
||||
bufend - (buf + intdig_no));
|
||||
|
||||
p = buf + intdig_no + groups - 1;
|
||||
p = buf + intdig_no + ngroups - 1;
|
||||
do
|
||||
{
|
||||
unsigned int len = *grouping++;
|
||||
@ -1128,5 +1215,5 @@ group_number (char *buf, char *bufend, unsigned int intdig_no,
|
||||
*p-- = buf[--intdig_no];
|
||||
while (p > buf);
|
||||
|
||||
return bufend + groups;
|
||||
return bufend + ngroups;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Print size value using units for orders of magnitude.
|
||||
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.
|
||||
Based on a proposal by Larry McVoy <lm@sgi.com>.
|
||||
@ -24,26 +24,27 @@
|
||||
#include <math.h>
|
||||
#include <printf.h>
|
||||
#ifdef USE_IN_LIBIO
|
||||
# include <libioP.h>
|
||||
# include <libioP.h>
|
||||
#else
|
||||
# include <stdio.h>
|
||||
# include <stdio.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* This defines make it possible to use the same code for GNU C library and
|
||||
the GNU I/O library. */
|
||||
#ifdef USE_IN_LIBIO
|
||||
# define PUT(f, s, n) _IO_sputn (f, s, n)
|
||||
# define PAD(f, c, n) _IO_padn (f, c, n)
|
||||
# define PUT(f, s, n) _IO_sputn (f, s, n)
|
||||
# define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : _IO_padn (f, c, n))
|
||||
/* We use this file GNU C library and GNU I/O library. So make
|
||||
names equal. */
|
||||
# undef putc
|
||||
# define putc(c, f) _IO_putc_unlocked (c, f)
|
||||
# define size_t _IO_size_t
|
||||
# define FILE _IO_FILE
|
||||
# undef putc
|
||||
# define putc(c, f) (wide \
|
||||
? _IO_putwc_unlocked (c, f) : _IO_putc_unlocked (c, f))
|
||||
# define size_t _IO_size_t
|
||||
# define FILE _IO_FILE
|
||||
#else /* ! USE_IN_LIBIO */
|
||||
# define PUT(f, s, n) fwrite (s, 1, n, f)
|
||||
# define PAD(f, c, n) __printf_pad (f, c, n)
|
||||
# define PUT(f, s, n) fwrite (s, 1, n, f)
|
||||
# define PAD(f, c, n) __printf_pad (f, c, n)
|
||||
ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c. */
|
||||
#endif /* USE_IN_LIBIO */
|
||||
|
||||
@ -58,21 +59,25 @@ ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c. */
|
||||
++done; \
|
||||
} while (0)
|
||||
|
||||
#define PRINT(ptr, len) \
|
||||
#define PRINT(ptr, wptr, len) \
|
||||
do \
|
||||
{ \
|
||||
register size_t outlen = (len); \
|
||||
if (len > 20) \
|
||||
{ \
|
||||
if (PUT (fp, ptr, outlen) != outlen) \
|
||||
if (PUT (fp, wide ? (const char *) wptr : ptr, outlen) != outlen) \
|
||||
return -1; \
|
||||
ptr += outlen; \
|
||||
done += outlen; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*ptr++); \
|
||||
if (wide) \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*wptr++); \
|
||||
else \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*ptr++); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
@ -117,9 +122,11 @@ printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
|
||||
|
||||
/* "NaN" or "Inf" for the special cases. */
|
||||
const char *special = NULL;
|
||||
const wchar_t *wspecial = NULL;
|
||||
|
||||
struct printf_info fp_info;
|
||||
int done = 0;
|
||||
int wide = info->wide;
|
||||
|
||||
|
||||
/* Fetch the argument value. */
|
||||
@ -132,11 +139,13 @@ printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
|
||||
if (__isnanl (fpnum.ldbl.d))
|
||||
{
|
||||
special = "nan";
|
||||
wspecial = L"nan";
|
||||
negative = 0;
|
||||
}
|
||||
else if (__isinfl (fpnum.ldbl.d))
|
||||
{
|
||||
special = "inf";
|
||||
wspecial = L"inf";
|
||||
|
||||
negative = fpnum.ldbl.d < 0;
|
||||
}
|
||||
@ -156,11 +165,13 @@ printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
|
||||
if (__isnan (fpnum.dbl.d))
|
||||
{
|
||||
special = "nan";
|
||||
wspecial = L"nan";
|
||||
negative = 0;
|
||||
}
|
||||
else if (__isinf (fpnum.dbl.d))
|
||||
{
|
||||
special = "inf";
|
||||
wspecial = L"inf";
|
||||
|
||||
negative = fpnum.dbl.d < 0;
|
||||
}
|
||||
@ -174,7 +185,7 @@ printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
|
||||
|
||||
if (special)
|
||||
{
|
||||
int width = info->prec > info->width ? info->prec : info->width;
|
||||
int width = info->prec > width ? info->prec : width;
|
||||
|
||||
if (negative || info->showsign || info->space)
|
||||
--width;
|
||||
@ -190,7 +201,7 @@ printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
|
||||
else if (info->space)
|
||||
outchar (' ');
|
||||
|
||||
PRINT (special, 3);
|
||||
PRINT (special, wspecial, 3);
|
||||
|
||||
if (info->left && width > 0)
|
||||
PADN (' ', width);
|
||||
@ -212,7 +223,7 @@ printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
|
||||
fp_info.group = info->group;
|
||||
fp_info.extra = info->extra;
|
||||
fp_info.pad = info->pad;
|
||||
fp_info.wide = 0;
|
||||
fp_info.wide = wide;
|
||||
|
||||
if (fp_info.left && fp_info.pad == L' ')
|
||||
{
|
||||
|
@ -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
|
||||
@ -62,6 +62,7 @@
|
||||
#define GROUP 0x080 /* ': group numbers */
|
||||
#define MALLOC 0x100 /* a: malloc strings */
|
||||
#define CHAR 0x200 /* hh: char */
|
||||
#define I18N 0x400 /* I: use locale's digits */
|
||||
|
||||
|
||||
#ifdef USE_IN_LIBIO
|
||||
@ -479,8 +480,9 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for the assignment-suppressing and the number grouping flag. */
|
||||
while (*f == L_('*') || *f == L_('\''))
|
||||
/* Check for the assignment-suppressing, the number grouping flag,
|
||||
and the signal to use the locale's digit representation. */
|
||||
while (*f == L_('*') || *f == L_('\'') || *f == L_('I'))
|
||||
switch (*f++)
|
||||
{
|
||||
case L_('*'):
|
||||
@ -489,6 +491,9 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||
case L_('\''):
|
||||
flags |= GROUP;
|
||||
break;
|
||||
case L_('I'):
|
||||
flags |= I18N;
|
||||
break;
|
||||
}
|
||||
|
||||
/* We have seen width. */
|
||||
@ -1192,22 +1197,137 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||
if (base == 0)
|
||||
base = 10;
|
||||
|
||||
/* Read the number into workspace. */
|
||||
while (c != EOF && width != 0)
|
||||
if (base == 10 && (flags & I18N) != 0)
|
||||
{
|
||||
if (base == 16 ? !ISXDIGIT (c) :
|
||||
((!ISDIGIT (c) || c - L_('0') >= base) &&
|
||||
!((flags & GROUP) && base == 10 && c == thousands)))
|
||||
break;
|
||||
ADDW (c);
|
||||
if (width > 0)
|
||||
--width;
|
||||
int from_level;
|
||||
int to_level;
|
||||
#ifdef COMPILE_WPRINTF
|
||||
const wchar_t *wcdigits;
|
||||
#else
|
||||
const char *mbdigits[10];
|
||||
#endif
|
||||
int n;
|
||||
|
||||
c = inchar ();
|
||||
from_level = 0;
|
||||
#ifdef COMPILE_WPRINTF
|
||||
to_level = _NL_CURRENT_WORD (LC_CTYPE,
|
||||
_NL_CTYPE_INDIGITS_WC_LEN) - 1;
|
||||
#else
|
||||
to_level = _NL_CURRENT_WORD (LC_CTYPE,
|
||||
_NL_CTYPE_INDIGITS_MB_LEN) - 1;
|
||||
#endif
|
||||
|
||||
/* In this round we get the pointer to the digit strings
|
||||
and also perform the first round of comparisons. */
|
||||
for (n = 0; n < 10; ++n)
|
||||
{
|
||||
size_t dlen;
|
||||
size_t dcnt;
|
||||
|
||||
/* Get the string for the digits with value N. */
|
||||
#ifdef COMPILE_WPRINTF
|
||||
wcdigits[n] = _NL_CURRENT (LC_CTYPE,
|
||||
_NL_CTYPE_INDIGITS0_WC + n);
|
||||
if (c == *wcdigit[n])
|
||||
break;
|
||||
|
||||
/* Advance the pointer to the next string. */
|
||||
++wcdigits[n];
|
||||
#else
|
||||
mbdigits[n] = _NL_CURRENT (LC_CTYPE,
|
||||
_NL_CTYPE_INDIGITS0_MB + n);
|
||||
dlen = strlen (mbdigits[n]);
|
||||
|
||||
dcnt = 0;
|
||||
do
|
||||
{
|
||||
if (c != mbdigits[n][dcnt])
|
||||
break;
|
||||
c = inchar ();
|
||||
}
|
||||
while (--dcnt > 0);
|
||||
|
||||
if (dcnt == 0)
|
||||
/* We found it. */
|
||||
break;
|
||||
|
||||
/* Advance the pointer to the next string. */
|
||||
mbdigits[n] += dlen + 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (n == 10)
|
||||
{
|
||||
/*Have not yet found the digit. */
|
||||
while (++from_level <= to_level)
|
||||
{
|
||||
/* Search all ten digits of this level. */
|
||||
for (n = 0; n < 10; ++n)
|
||||
{
|
||||
#ifdef COMPILE_WPRINTF
|
||||
if (c == *wcdigit[n])
|
||||
break;
|
||||
|
||||
/* Advance the pointer to the next string. */
|
||||
++wcdigits[n];
|
||||
#else
|
||||
size_t dlen = strlen (mbdigits[n]);
|
||||
size_t dcnt;
|
||||
|
||||
dcnt = 0;
|
||||
do
|
||||
{
|
||||
if (c != mbdigits[n][dcnt])
|
||||
break;
|
||||
c = inchar ();
|
||||
}
|
||||
while (--dcnt > 0);
|
||||
|
||||
if (dcnt == 0)
|
||||
/* We found it. */
|
||||
break;
|
||||
|
||||
/* Advance the pointer to the next string. */
|
||||
mbdigits[n] += dlen + 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (n < 10)
|
||||
/* Found it. */
|
||||
break;
|
||||
|
||||
/* Next level. */
|
||||
++from_level;
|
||||
}
|
||||
}
|
||||
|
||||
if (n == 10)
|
||||
{
|
||||
/* Haven't found anything. Push the last character back
|
||||
and return an error. */
|
||||
ungetc (c, s);
|
||||
input_error ();
|
||||
}
|
||||
|
||||
ADDW (L_('0') + n);
|
||||
}
|
||||
else
|
||||
/* Read the number into workspace. */
|
||||
while (c != EOF && width != 0)
|
||||
{
|
||||
if (base == 16 ? !ISXDIGIT (c) :
|
||||
((!ISDIGIT (c) || c - L_('0') >= base) &&
|
||||
!((flags & GROUP) && base == 10 && c == thousands)))
|
||||
break;
|
||||
ADDW (c);
|
||||
if (width > 0)
|
||||
--width;
|
||||
|
||||
if (wpsize == 0 ||
|
||||
(wpsize == 1 && (wp[0] == L_('+') || wp[0] == L_('-'))))
|
||||
c = inchar ();
|
||||
}
|
||||
|
||||
if (wpsize == 0
|
||||
|| (wpsize == 1 && (wp[0] == L_('+') || wp[0] == L_('-'))))
|
||||
{
|
||||
/* There was no number. If we are supposed to read a pointer
|
||||
we must recognize "(nil)" as well. */
|
||||
|
@ -76,7 +76,10 @@ canonicalize (const char *name, char *resolved)
|
||||
if (name[0] != '/')
|
||||
{
|
||||
if (!__getcwd (rpath, path_max))
|
||||
goto error;
|
||||
{
|
||||
rpath[0] = '\0';
|
||||
goto error;
|
||||
}
|
||||
dest = strchr (rpath, '\0');
|
||||
}
|
||||
else
|
||||
@ -122,6 +125,9 @@ canonicalize (const char *name, char *resolved)
|
||||
if (resolved)
|
||||
{
|
||||
__set_errno (ENAMETOOLONG);
|
||||
if (dest > rpath + 1)
|
||||
dest--;
|
||||
*dest = '\0';
|
||||
goto error;
|
||||
}
|
||||
new_size = rpath_limit - rpath;
|
||||
|
@ -71,7 +71,7 @@
|
||||
|
||||
/* The fdlibm code requires no interrupts for exceptions. Don't
|
||||
change the rounding mode, it would break long double I/O! */
|
||||
#define _FPU_DEFAULT 0x00000000 /* Default value. */
|
||||
#define _FPU_DEFAULT 0x00001000 /* Default value. */
|
||||
|
||||
/* Type of the control word. */
|
||||
typedef unsigned int fpu_control_t;
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* Print floating point number in hexadecimal notation according to
|
||||
ISO C99.
|
||||
Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Print floating point number in hexadecimal notation according to ISO C99.
|
||||
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.
|
||||
|
||||
@ -28,6 +27,7 @@
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include "_itoa.h"
|
||||
#include "_itowa.h"
|
||||
#include <locale/localeinfo.h>
|
||||
|
||||
/* #define NDEBUG 1*/ /* Undefine this for debugging assertions. */
|
||||
@ -38,7 +38,7 @@
|
||||
#ifdef USE_IN_LIBIO
|
||||
# include <libioP.h>
|
||||
# define PUT(f, s, n) _IO_sputn (f, s, n)
|
||||
# define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : _IO_padn (f, c, n))
|
||||
# define PAD(f, c, n) (wide ? _IO_wpadn (f, c, n) : _IO_padn (f, c, n))
|
||||
/* We use this file GNU C library and GNU I/O library. So make
|
||||
names equal. */
|
||||
# undef putc
|
||||
@ -63,13 +63,16 @@ ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c. */
|
||||
++done; \
|
||||
} while (0)
|
||||
|
||||
#define PRINT(ptr, len) \
|
||||
#define PRINT(ptr, wptr, len) \
|
||||
do \
|
||||
{ \
|
||||
int outlen = (len); \
|
||||
const char *cp = (ptr); \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*cp++); \
|
||||
register size_t outlen = (len); \
|
||||
if (wide) \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*wptr++); \
|
||||
else \
|
||||
while (outlen-- > 0) \
|
||||
outchar (*ptr++); \
|
||||
} while (0)
|
||||
|
||||
#define PADN(ch, len) \
|
||||
@ -100,21 +103,28 @@ __printf_fphex (FILE *fp,
|
||||
fpnum;
|
||||
|
||||
/* Locale-dependent representation of decimal point. */
|
||||
wchar_t decimal;
|
||||
const char *decimal;
|
||||
wchar_t decimalwc;
|
||||
|
||||
/* "NaN" or "Inf" for the special cases. */
|
||||
const char *special = NULL;
|
||||
const wchar_t *wspecial = NULL;
|
||||
|
||||
/* Buffer for the generated number string for the mantissa. The
|
||||
maximal size for the mantissa is 128 bits. */
|
||||
char numbuf[32];
|
||||
char *numstr;
|
||||
char *numend;
|
||||
wchar_t wnumbuf[32];
|
||||
wchar_t *wnumstr;
|
||||
wchar_t *wnumend;
|
||||
int negative;
|
||||
|
||||
/* The maximal exponent of two in decimal notation has 5 digits. */
|
||||
char expbuf[5];
|
||||
char *expstr;
|
||||
wchar_t wexpbuf[5];
|
||||
wchar_t *wexpstr;
|
||||
int expnegative;
|
||||
int exponent;
|
||||
|
||||
@ -140,27 +150,17 @@ __printf_fphex (FILE *fp,
|
||||
/* Figure out the decimal point character. */
|
||||
if (info->extra == 0)
|
||||
{
|
||||
mbstate_t state;
|
||||
|
||||
memset (&state, '\0', sizeof (state));
|
||||
if (__mbrtowc (&decimal, _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT),
|
||||
strlen (_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT)),
|
||||
&state) <= 0)
|
||||
decimal = (wchar_t) *_NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
|
||||
decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
|
||||
decimalwc = _NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_DECIMAL_POINT_WC);
|
||||
}
|
||||
else
|
||||
{
|
||||
mbstate_t state;
|
||||
|
||||
memset (&state, '\0', sizeof (state));
|
||||
if (__mbrtowc (&decimal, _NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT),
|
||||
strlen (_NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT)),
|
||||
&state) <= 0)
|
||||
decimal = (wchar_t) *_NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT);
|
||||
decimal = _NL_CURRENT (LC_MONETARY, MON_DECIMAL_POINT);
|
||||
decimalwc = _NL_CURRENT_WORD (LC_MONETARY,
|
||||
_NL_MONETARY_DECIMAL_POINT_WC);
|
||||
}
|
||||
/* Give default value. */
|
||||
if (decimal == L'\0')
|
||||
decimal = L'.';
|
||||
/* The decimal point character must never be zero. */
|
||||
assert (*decimal != '\0' && decimalwc != L'\0');
|
||||
|
||||
|
||||
/* Fetch the argument value. */
|
||||
@ -172,13 +172,33 @@ __printf_fphex (FILE *fp,
|
||||
/* Check for special values: not a number or infinity. */
|
||||
if (__isnanl (fpnum.ldbl.d))
|
||||
{
|
||||
special = isupper (info->spec) ? "NAN" : "nan";
|
||||
if (isupper (info->spec))
|
||||
{
|
||||
special = "NAN";
|
||||
wspecial = L"NAN";
|
||||
}
|
||||
else
|
||||
{
|
||||
special = "nan";
|
||||
wspecial = L"nan";
|
||||
}
|
||||
negative = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (__isinfl (fpnum.ldbl.d))
|
||||
special = isupper (info->spec) ? "INF" : "inf";
|
||||
{
|
||||
if (isupper (info->spec))
|
||||
{
|
||||
special = "INF";
|
||||
wspecial = L"INF";
|
||||
}
|
||||
else
|
||||
{
|
||||
special = "inf";
|
||||
wspecial = L"inf";
|
||||
}
|
||||
}
|
||||
|
||||
negative = signbit (fpnum.ldbl.d);
|
||||
}
|
||||
@ -191,13 +211,33 @@ __printf_fphex (FILE *fp,
|
||||
/* Check for special values: not a number or infinity. */
|
||||
if (__isnan (fpnum.dbl.d))
|
||||
{
|
||||
special = isupper (info->spec) ? "NAN" : "nan";
|
||||
if (isupper (info->spec))
|
||||
{
|
||||
special = "NAN";
|
||||
wspecial = L"NAN";
|
||||
}
|
||||
else
|
||||
{
|
||||
special = "nan";
|
||||
wspecial = L"nan";
|
||||
}
|
||||
negative = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (__isinf (fpnum.dbl.d))
|
||||
special = isupper (info->spec) ? "INF" : "inf";
|
||||
{
|
||||
if (isupper (info->spec))
|
||||
{
|
||||
special = "INF";
|
||||
wspecial = L"INF";
|
||||
}
|
||||
else
|
||||
{
|
||||
special = "inf";
|
||||
wspecial = L"inf";
|
||||
}
|
||||
}
|
||||
|
||||
negative = signbit (fpnum.dbl.d);
|
||||
}
|
||||
@ -221,7 +261,7 @@ __printf_fphex (FILE *fp,
|
||||
else if (info->space)
|
||||
outchar (' ');
|
||||
|
||||
PRINT (special, 3);
|
||||
PRINT (special, wspecial, 3);
|
||||
|
||||
if (info->left && width > 0)
|
||||
PADN (' ', width);
|
||||
@ -243,15 +283,26 @@ __printf_fphex (FILE *fp,
|
||||
zero_mantissa = num == 0;
|
||||
|
||||
if (sizeof (unsigned long int) > 6)
|
||||
numstr = _itoa_word (num, numbuf + sizeof numbuf, 16,
|
||||
info->spec == 'A');
|
||||
{
|
||||
wnumstr = _itowa_word (num, wnumbuf + sizeof wnumbuf, 16,
|
||||
info->spec == 'A');
|
||||
numstr = _itoa_word (num, numbuf + sizeof numbuf, 16,
|
||||
info->spec == 'A');
|
||||
}
|
||||
else
|
||||
numstr = _itoa (num, numbuf + sizeof numbuf, 16,
|
||||
info->spec == 'A');
|
||||
{
|
||||
wnumstr = _itowa (num, wnumbuf + sizeof wnumbuf, 16,
|
||||
info->spec == 'A');
|
||||
numstr = _itoa (num, numbuf + sizeof numbuf, 16,
|
||||
info->spec == 'A');
|
||||
}
|
||||
|
||||
/* Fill with zeroes. */
|
||||
while (numstr > numbuf + (sizeof numbuf - 52 / 4))
|
||||
*--numstr = '0';
|
||||
while (wnumstr > wnumbuf + (sizeof wnumbuf - 52 / 4))
|
||||
{
|
||||
*--wnumstr = L'0';
|
||||
*--numstr = '0';
|
||||
}
|
||||
|
||||
leading = fpnum.dbl.ieee.exponent == 0 ? '0' : '1';
|
||||
|
||||
@ -287,9 +338,13 @@ __printf_fphex (FILE *fp,
|
||||
/* Look for trailing zeroes. */
|
||||
if (! zero_mantissa)
|
||||
{
|
||||
wnumend = wnumbuf + sizeof wnumbuf;
|
||||
numend = numbuf + sizeof numbuf;
|
||||
while (numend[-1] == '0')
|
||||
--numend;
|
||||
while (wnumend[-1] == L'0')
|
||||
{
|
||||
--wnumend;
|
||||
--numend;
|
||||
}
|
||||
|
||||
if (precision == -1)
|
||||
precision = numend - numstr;
|
||||
@ -316,17 +371,22 @@ __printf_fphex (FILE *fp,
|
||||
like in ASCII. This is true for the rest of GNU, too. */
|
||||
if (ch == '9')
|
||||
{
|
||||
wnumstr[cnt] = (wchar_t) info->spec;
|
||||
numstr[cnt] = info->spec; /* This is tricky,
|
||||
think about it! */
|
||||
think about it! */
|
||||
break;
|
||||
}
|
||||
else if (tolower (ch) < 'f')
|
||||
{
|
||||
++numstr[cnt];
|
||||
++wnumstr[cnt];
|
||||
break;
|
||||
}
|
||||
else
|
||||
numstr[cnt] = '0';
|
||||
{
|
||||
numstr[cnt] = '0';
|
||||
wnumstr[cnt] = L'0';
|
||||
}
|
||||
}
|
||||
if (cnt < 0)
|
||||
{
|
||||
@ -357,10 +417,12 @@ __printf_fphex (FILE *fp,
|
||||
if (precision == -1)
|
||||
precision = 0;
|
||||
numend = numstr;
|
||||
wnumend = wnumstr;
|
||||
}
|
||||
|
||||
/* Now we can compute the exponent string. */
|
||||
expstr = _itoa_word (exponent, expbuf + sizeof expbuf, 10, 0);
|
||||
wexpstr = _itowa_word (exponent, wexpbuf + sizeof wexpbuf, 10, 0);
|
||||
|
||||
/* Now we have all information to compute the size. */
|
||||
width -= ((negative || info->showsign || info->space)
|
||||
@ -394,11 +456,14 @@ __printf_fphex (FILE *fp,
|
||||
outchar (leading);
|
||||
|
||||
if (precision > 0 || info->alt)
|
||||
outchar (decimal);
|
||||
{
|
||||
const wchar_t *wtmp = &decimalwc;
|
||||
PRINT (decimal, wtmp, wide ? 1 : strlen (decimal));
|
||||
}
|
||||
|
||||
if (precision > 0)
|
||||
{
|
||||
PRINT (numstr, MIN (numend - numstr, precision));
|
||||
PRINT (numstr, wnumstr, MIN (numend - numstr, precision));
|
||||
if (precision > numend - numstr)
|
||||
PADN ('0', precision - (numend - numstr));
|
||||
}
|
||||
@ -413,7 +478,7 @@ __printf_fphex (FILE *fp,
|
||||
|
||||
outchar (expnegative ? '-' : '+');
|
||||
|
||||
PRINT (expstr, (expbuf + sizeof expbuf) - expstr);
|
||||
PRINT (expstr, wexpstr, (expbuf + sizeof expbuf) - expstr);
|
||||
|
||||
if (info->left && info->pad != '0' && width > 0)
|
||||
PADN (info->pad, width);
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* Print floating point number in hexadecimal notation according to
|
||||
ISO C99.
|
||||
Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Print floating point number in hexadecimal notation according to ISO C99.
|
||||
Copyright (C) 1997, 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
|
||||
@ -36,14 +35,25 @@ do { \
|
||||
zero_mantissa = num == 0; \
|
||||
\
|
||||
if (sizeof (unsigned long int) > 6) \
|
||||
numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
{ \
|
||||
numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
wnumstr = _itowa_word (num, wnumbuf + sizeof wnumbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
} \
|
||||
else \
|
||||
numstr = _itoa (num, numbuf + sizeof numbuf, 16, info->spec == 'A'); \
|
||||
{ \
|
||||
numstr = _itoa (num, numbuf + sizeof numbuf, 16, info->spec == 'A');\
|
||||
wnumstr = _itowa (num, wnumbuf + sizeof wnumbuf, 16, \
|
||||
info->spec == 'A'); \
|
||||
} \
|
||||
\
|
||||
/* Fill with zeroes. */ \
|
||||
while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \
|
||||
*--numstr = '0'; \
|
||||
{ \
|
||||
*--numstr = '0'; \
|
||||
*--wnumstr = L'0'; \
|
||||
} \
|
||||
\
|
||||
/* We use a full nibble for the leading digit. */ \
|
||||
leading = *numstr++; \
|
||||
|
2
sysdeps/unix/sysv/linux/configure
vendored
2
sysdeps/unix/sysv/linux/configure
vendored
@ -97,6 +97,8 @@ if test "$prefix" = "/usr"; then
|
||||
libc_cv_slibdir="/lib64"
|
||||
if test "$libdir" = '${exec_prefix}/lib'; then
|
||||
libdir='${exec_prefix}/lib64';
|
||||
# Locale data can be shared between 32bit and 64bit libraries
|
||||
libc_cv_localedir='${exec_prefix}/lib/locale'
|
||||
fi
|
||||
else
|
||||
libc_cv_slibdir="/lib"
|
||||
|
@ -68,6 +68,8 @@ if test "$prefix" = "/usr"; then
|
||||
libc_cv_slibdir="/lib64"
|
||||
if test "$libdir" = '${exec_prefix}/lib'; then
|
||||
libdir='${exec_prefix}/lib64';
|
||||
# Locale data can be shared between 32bit and 64bit libraries
|
||||
libc_cv_localedir='${exec_prefix}/lib/locale'
|
||||
fi
|
||||
else
|
||||
libc_cv_slibdir="/lib"
|
||||
|
Loading…
x
Reference in New Issue
Block a user