mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
Update.
2000-11-18 Ulrich Drepper <drepper@redhat.com> * wcsmbs/mbrtowc.c (__mbrtowc): Do not only flush if input is '\0'. * wcsmbs/Makefile (tests): Add tst-mbrtowc and tst-wcrtomb. (tst-mbrtowc-ENV): New variable. (tst-wcrtomb-ENV): New variable. * wcsmbs/tst-mbrtowc.c: New file. * wcsmbs/tst-wcrtomb.c: New file.
This commit is contained in:
parent
7b32d065d6
commit
bb2fc8504d
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
2000-11-18 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* wcsmbs/mbrtowc.c (__mbrtowc): Do not only flush if input is '\0'.
|
||||
|
||||
* wcsmbs/Makefile (tests): Add tst-mbrtowc and tst-wcrtomb.
|
||||
(tst-mbrtowc-ENV): New variable.
|
||||
(tst-wcrtomb-ENV): New variable.
|
||||
* wcsmbs/tst-mbrtowc.c: New file.
|
||||
* wcsmbs/tst-wcrtomb.c: New file.
|
||||
|
||||
2000-11-16 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* manual/install.texi (Tools for Compilation): Update
|
||||
|
42
FAQ
42
FAQ
@ -236,22 +236,9 @@ a local mirror first.
|
||||
|
||||
You should always try to use the latest official release. Older versions
|
||||
may not have all the features GNU libc requires. The current releases of
|
||||
egcs (1.0.3 and 1.1.1) should work with the GNU C library (for powerpc see
|
||||
gcc (2.95 or newer) should work with the GNU C library (for powerpc see
|
||||
question 1.5; for ARM see question 1.6; for MIPS see question 1.20).
|
||||
|
||||
While the GNU CC should be able to compile glibc it is nevertheless adviced
|
||||
to use EGCS. Comparing the sizes of glibc on Intel compiled with a recent
|
||||
EGCS and gcc 2.8.1 shows this:
|
||||
|
||||
text data bss dec hex filename
|
||||
egcs-2.93.10 862897 15944 12824 891665 d9b11 libc.so
|
||||
gcc-2.8.1 959965 16468 12152 988585 f15a9 libc.so
|
||||
|
||||
Make up your own decision.
|
||||
|
||||
GNU CC versions 2.95 and above are derived from egcs, and they may do even
|
||||
better.
|
||||
|
||||
Please note that gcc 2.95 and 2.95.x cannot compile glibc on Alpha due to
|
||||
problems in the complex float support.
|
||||
|
||||
@ -328,19 +315,19 @@ Binutils 2.9.1.0.16 or later is also required.
|
||||
* lots of disk space (~400MB for i?86-linux; more for RISC platforms).
|
||||
|
||||
* plenty of time. Compiling just the shared and static libraries for
|
||||
i?86-linux takes approximately 1h on an AMD-K6@225MHz w/ 96MB of RAM,
|
||||
45mins on a Celeron@400MHz w/ 128MB, and 55mins on a Alpha@533MHz w/ 256MB.
|
||||
Multiply this by 1.5 or 2.0 if you build profiling and/or the highly
|
||||
optimized version as well. For Hurd systems times are much higher.
|
||||
35mins on a 2xPIII@550Mhz w/ 512MB RAM. On a 2xUltraSPARC-II@360Mhz
|
||||
w/ 1GB RAM it takes about 14 minutes. Multiply this by 1.5 or 2.0
|
||||
if you build profiling and/or the highly optimized version as well.
|
||||
For Hurd systems times are much higher.
|
||||
|
||||
You should avoid compiling in a NFS mounted filesystem. This is
|
||||
very slow.
|
||||
|
||||
James Troup <J.J.Troup@comp.brad.ac.uk> reports a compile time of
|
||||
45h34m for a full build (shared, static, and profiled) on Atari
|
||||
Falcon (Motorola 68030 @ 16 Mhz, 14 Mb memory) and Jan Barte
|
||||
<yann@plato.uni-paderborn.de> reports 22h48m on Atari TT030
|
||||
(Motorola 68030 @ 32 Mhz, 34 Mb memory)
|
||||
James Troup <J.J.Troup@comp.brad.ac.uk> reports a compile time for
|
||||
an earlier (and smaller!) version of glibc of 45h34m for a full build
|
||||
(shared, static, and profiled) on Atari Falcon (Motorola 68030 @ 16 Mhz,
|
||||
14 Mb memory) and Jan Barte <yann@plato.uni-paderborn.de> reports
|
||||
22h48m on Atari TT030 (Motorola 68030 @ 32 Mhz, 34 Mb memory)
|
||||
|
||||
A full build of the PowerPC library took 1h on a PowerPC 750@400Mhz w/
|
||||
64MB of RAM, and about 9h on a 601@60Mhz w/ 72Mb.
|
||||
@ -373,11 +360,7 @@ to the root of the 2.2 tree and do `make include/linux/version.h'.
|
||||
1.9. The compiler hangs while building iconvdata modules. What's
|
||||
wrong?
|
||||
|
||||
{ZW} This is a problem with old versions of GCC. Initialization of large
|
||||
static arrays is very slow. The compiler will eventually finish; give it
|
||||
time.
|
||||
|
||||
The problem is fixed in egcs 1.1.
|
||||
{} Removed. Does not apply anymore.
|
||||
|
||||
|
||||
1.10. When I run `nm -u libc.so' on the produced library I still
|
||||
@ -843,8 +826,7 @@ you got with your distribution.
|
||||
glibc 2.x?
|
||||
|
||||
{AJ} There's only correct support for glibc 2.0.x in gcc 2.7.2.3 or later.
|
||||
But you should get at least gcc 2.8.1 or egcs 1.1 (or later versions)
|
||||
instead.
|
||||
But you should get at least gcc 2.95.2 (or later versions) instead.
|
||||
|
||||
|
||||
2.10. The `gencat' utility cannot process the catalog sources which
|
||||
|
@ -39,7 +39,8 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
|
||||
wcscasecmp wcsncase wcscasecmp_l wcsncase_l \
|
||||
wcsmbsload
|
||||
|
||||
tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc
|
||||
tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \
|
||||
tst-wcrtomb
|
||||
|
||||
include ../Rules
|
||||
|
||||
@ -62,3 +63,5 @@ CFLAGS-wcstold_l.c = -I../stdlib
|
||||
CFLAGS-wcstof_l.c = -I../stdlib
|
||||
|
||||
tst-btowc-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-mbrtowc-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
tst-wcrtomb-ENV = LOCPATH=$(common-objpfx)localedata
|
||||
|
@ -42,7 +42,7 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
|
||||
size_t dummy;
|
||||
const unsigned char *inbuf;
|
||||
char *outbuf = (char *) (pwc ?: buf);
|
||||
int flush;
|
||||
int flush = 0;
|
||||
|
||||
/* Set information for this step. */
|
||||
data.__invocation_counter = 0;
|
||||
@ -60,8 +60,6 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
|
||||
n = 1;
|
||||
flush = 1;
|
||||
}
|
||||
else
|
||||
flush = *s == '\0' ? 1 : 0;
|
||||
|
||||
/* Tell where we want the result. */
|
||||
data.__outbuf = outbuf;
|
||||
|
108
wcsmbs/tst-mbrtowc.c
Normal file
108
wcsmbs/tst-mbrtowc.c
Normal file
@ -0,0 +1,108 @@
|
||||
/* Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 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 <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
|
||||
static int check_ascii (const char *locname);
|
||||
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
/* Check mapping of ASCII range for some character sets which have
|
||||
ASCII as a subset. For those the wide char generated must have
|
||||
the same value. */
|
||||
setlocale (LC_ALL, "C");
|
||||
result |= check_ascii (setlocale (LC_ALL, NULL));
|
||||
|
||||
setlocale (LC_ALL, "de_DE.UTF-8");
|
||||
result |= check_ascii (setlocale (LC_ALL, NULL));
|
||||
|
||||
setlocale (LC_ALL, "ja_JP.EUC-JP");
|
||||
result |= check_ascii (setlocale (LC_ALL, NULL));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
check_ascii (const char *locname)
|
||||
{
|
||||
int c;
|
||||
int res = 0;
|
||||
|
||||
printf ("Testing locale \"%s\":\n", locname);
|
||||
|
||||
for (c = 0; c <= 127; ++c)
|
||||
{
|
||||
char buf[MB_CUR_MAX];
|
||||
wchar_t wc = 0xffffffff;
|
||||
mbstate_t s;
|
||||
size_t n;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MB_CUR_MAX; ++i)
|
||||
buf[i] = c + i;
|
||||
|
||||
memset (&s, '\0', sizeof (s));
|
||||
|
||||
n = mbrtowc (&wc, buf, MB_CUR_MAX, &s);
|
||||
if (n == (size_t) -1)
|
||||
{
|
||||
printf ("%s: '\\x%x': encoding error\n", locname, c);
|
||||
++res;
|
||||
}
|
||||
else if (n == (size_t) -2)
|
||||
{
|
||||
printf ("%s: '\\x%x': incomplete character\n", locname, c);
|
||||
++res;
|
||||
}
|
||||
else if (n == 0 && c != 0)
|
||||
{
|
||||
printf ("%s: '\\x%x': 0 returned\n", locname, c);
|
||||
++res;
|
||||
}
|
||||
else if (n != 0 && c == 0)
|
||||
{
|
||||
printf ("%s: '\\x%x': not 0 returned\n", locname, c);
|
||||
++res;
|
||||
}
|
||||
else if (c != 0 && n != 1)
|
||||
{
|
||||
printf ("%s: '\\x%x': not 1 returned\n", locname, c);
|
||||
++res;
|
||||
}
|
||||
else if (wc != (wchar_t) c)
|
||||
{
|
||||
printf ("%s: '\\x%x': wc != L'\\x%x'\n", locname, c, c);
|
||||
++res;
|
||||
}
|
||||
}
|
||||
|
||||
printf (res == 1 ? "%d error\n" : "%d errors\n", res);
|
||||
|
||||
return res != 0;
|
||||
}
|
95
wcsmbs/tst-wcrtomb.c
Normal file
95
wcsmbs/tst-wcrtomb.c
Normal file
@ -0,0 +1,95 @@
|
||||
/* Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 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 <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
|
||||
static int check_ascii (const char *locname);
|
||||
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
/* Check mapping of ASCII range for some character sets which have
|
||||
ASCII as a subset. For those the wide char generated must have
|
||||
the same value. */
|
||||
setlocale (LC_ALL, "C");
|
||||
result |= check_ascii (setlocale (LC_ALL, NULL));
|
||||
|
||||
setlocale (LC_ALL, "de_DE.UTF-8");
|
||||
result |= check_ascii (setlocale (LC_ALL, NULL));
|
||||
|
||||
setlocale (LC_ALL, "ja_JP.EUC-JP");
|
||||
result |= check_ascii (setlocale (LC_ALL, NULL));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
check_ascii (const char *locname)
|
||||
{
|
||||
wchar_t wc;
|
||||
int res = 0;
|
||||
|
||||
printf ("Testing locale \"%s\":\n", locname);
|
||||
|
||||
for (wc = 0; wc <= 127; ++wc)
|
||||
{
|
||||
char buf[2 * MB_CUR_MAX];
|
||||
mbstate_t s;
|
||||
size_t n;
|
||||
|
||||
memset (buf, '\xff', sizeof (buf));
|
||||
memset (&s, '\0', sizeof (s));
|
||||
|
||||
n = wcrtomb (buf, wc, &s);
|
||||
if (n == (size_t) -1)
|
||||
{
|
||||
printf ("%s: '\\x%x': encoding error\n", locname, (int) wc);
|
||||
++res;
|
||||
}
|
||||
else if (n == 0)
|
||||
{
|
||||
printf ("%s: '\\x%x': 0 returned\n", locname, (int) wc);
|
||||
++res;
|
||||
}
|
||||
else if (n != 1)
|
||||
{
|
||||
printf ("%s: '\\x%x': not 1 returned\n", locname, (int) wc);
|
||||
++res;
|
||||
}
|
||||
else if (wc != (wchar_t) buf[0])
|
||||
{
|
||||
printf ("%s: L'\\x%x': buf[0] != '\\x%x'\n", locname, (int) wc,
|
||||
(int) wc);
|
||||
++res;
|
||||
}
|
||||
}
|
||||
|
||||
printf (res == 1 ? "%d error\n" : "%d errors\n", res);
|
||||
|
||||
return res != 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user