mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 10:50:07 +00:00
Update.
2000-04-26 Ulrich Drepper <drepper@redhat.com> * iconv/gconv_simple.c (utf8_internal_loop): Correctly reconstruct stored character in state in UNPACK_BYTES macro. * iconv/loop.c (SINGLE(LOOPFCT)): Make it actually work. Correct test for available characters, handle result of BODY code correctly. * localedata/Makefile (test-srcs): Add tst-mbswcs1. (distribute): Add tst-mbswcs.sh. Add rule to run tst-mbswcs.sh. * localedata/tst-mbswcs.sh: New file. * localedata/tst-mbswcs1.c: New file. 2000-04-26 Jakub Jelinek <jakub@redhat.com> * nis/nis_callback.c (__nis_create_callback): Do failed memory allocation fixups centrally, fix __builtin_expect call, return NULL on failure, not NIS_NOMEMORY. 2000-04-27 Bruno Haible <haible@clisp.cons.org>
This commit is contained in:
parent
cd201e387c
commit
316518d610
20
ChangeLog
20
ChangeLog
@ -1,4 +1,22 @@
|
|||||||
2000-04-27 Bruno Haible <clisp.cons.org>
|
2000-04-26 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* iconv/gconv_simple.c (utf8_internal_loop): Correctly reconstruct
|
||||||
|
stored character in state in UNPACK_BYTES macro.
|
||||||
|
* iconv/loop.c (SINGLE(LOOPFCT)): Make it actually work. Correct
|
||||||
|
test for available characters, handle result of BODY code correctly.
|
||||||
|
* localedata/Makefile (test-srcs): Add tst-mbswcs1.
|
||||||
|
(distribute): Add tst-mbswcs.sh.
|
||||||
|
Add rule to run tst-mbswcs.sh.
|
||||||
|
* localedata/tst-mbswcs.sh: New file.
|
||||||
|
* localedata/tst-mbswcs1.c: New file.
|
||||||
|
|
||||||
|
2000-04-26 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* nis/nis_callback.c (__nis_create_callback): Do failed memory
|
||||||
|
allocation fixups centrally, fix __builtin_expect call, return NULL
|
||||||
|
on failure, not NIS_NOMEMORY.
|
||||||
|
|
||||||
|
2000-04-27 Bruno Haible <haible@clisp.cons.org>
|
||||||
|
|
||||||
* intl/ngettext.c [!_LIBC]: Fix definition of NGETTEXT.
|
* intl/ngettext.c [!_LIBC]: Fix definition of NGETTEXT.
|
||||||
|
|
||||||
|
39
iconv/loop.c
39
iconv/loop.c
@ -307,10 +307,10 @@ SINGLE(LOOPFCT) (const unsigned char **inptrp, const unsigned char *inend,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Are there enough bytes in the input buffer? */
|
/* Are there enough bytes in the input buffer? */
|
||||||
if (__builtin_expect (inptr + (MAX_NEEDED_INPUT - inlen) > inend, 0))
|
if (__builtin_expect (inptr + (MIN_NEEDED_INPUT - inlen) > inend, 0))
|
||||||
{
|
{
|
||||||
#ifdef STORE_REST
|
|
||||||
*inptrp = inend;
|
*inptrp = inend;
|
||||||
|
#ifdef STORE_REST
|
||||||
inptr = bytebuf;
|
inptr = bytebuf;
|
||||||
inptrp = &inptr;
|
inptrp = &inptr;
|
||||||
inend = &bytebuf[inlen];
|
inend = &bytebuf[inlen];
|
||||||
@ -335,28 +335,53 @@ SINGLE(LOOPFCT) (const unsigned char **inptrp, const unsigned char *inend,
|
|||||||
/* Now add characters from the normal input buffer. */
|
/* Now add characters from the normal input buffer. */
|
||||||
do
|
do
|
||||||
bytebuf[inlen++] = *inptr++;
|
bytebuf[inlen++] = *inptr++;
|
||||||
while (inlen < MAX_NEEDED_INPUT);
|
while (inlen < MAX_NEEDED_INPUT && inptr < inend);
|
||||||
|
|
||||||
inptr = bytebuf;
|
inptr = bytebuf;
|
||||||
inend = &inptr[MAX_NEEDED_INPUT];
|
inend = &bytebuf[inlen];
|
||||||
|
#undef NEED_LENGTH_TEST
|
||||||
|
#define NEED_LENGTH_TEST 1
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
BODY
|
BODY
|
||||||
}
|
}
|
||||||
while (0);
|
while (0);
|
||||||
|
|
||||||
if (result == __GCONV_OK)
|
/* Now we either have produced an output character and consumed all the
|
||||||
|
bytes from the state and at least one more, or the character is still
|
||||||
|
incomplete, or we have some other error (like illegal input character,
|
||||||
|
no space in output buffer). */
|
||||||
|
if (inptr != bytebuf)
|
||||||
{
|
{
|
||||||
/* We successfully converted the character (maybe even more).
|
/* We found a new character. */
|
||||||
Update the pointers passed in. */
|
|
||||||
assert (inptr - bytebuf > (state->__count & 7));
|
assert (inptr - bytebuf > (state->__count & 7));
|
||||||
|
|
||||||
*inptrp += inptr - bytebuf - (state->__count & 7);
|
*inptrp += inptr - bytebuf - (state->__count & 7);
|
||||||
*outptrp = outptr;
|
*outptrp = outptr;
|
||||||
|
|
||||||
|
result = __GCONV_OK;
|
||||||
|
|
||||||
/* Clear the state buffer. */
|
/* Clear the state buffer. */
|
||||||
state->__count &= ~7;
|
state->__count &= ~7;
|
||||||
}
|
}
|
||||||
|
else if (result == __GCONV_INCOMPLETE_INPUT)
|
||||||
|
{
|
||||||
|
/* This can only happen if we have less than MAX_NEEDED_INPUT bytes
|
||||||
|
available. */
|
||||||
|
assert (inend != &bytebuf[MAX_NEEDED_INPUT]);
|
||||||
|
|
||||||
|
*inptrp += inend - bytebuf - (state->__count & 7);
|
||||||
|
#ifdef STORE_REST
|
||||||
|
inptrp = &inptr;
|
||||||
|
|
||||||
|
STORE_REST
|
||||||
|
#else
|
||||||
|
/* We don't have enough input for another complete input
|
||||||
|
character. */
|
||||||
|
while (inptr < inend)
|
||||||
|
state->__value.__wchb[inlen++] = *inptr++;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,8 @@ locales := $(filter-out $(addprefix locales/, CVS RCS SCCS %~), \
|
|||||||
repertoiremaps := $(filter-out $(addprefix repertoiremaps/, CVS RCS SCCS %~), \
|
repertoiremaps := $(filter-out $(addprefix repertoiremaps/, CVS RCS SCCS %~), \
|
||||||
$(wildcard repertoiremaps/*))
|
$(wildcard repertoiremaps/*))
|
||||||
|
|
||||||
test-srcs := collate-test xfrm-test tst-fmon tst-rpmatch tst-trans
|
test-srcs := collate-test xfrm-test tst-fmon tst-rpmatch tst-trans \
|
||||||
|
tst-mbswcs1
|
||||||
test-input := de_DE.ISO-8859-1 da_DK.ISO-8859-1 fr_CA,2.13.ISO-8859-1 \
|
test-input := de_DE.ISO-8859-1 da_DK.ISO-8859-1 fr_CA,2.13.ISO-8859-1 \
|
||||||
hr_HR.ISO-8859-2 # once it is fixed: cs_CZ.ISO-8859-2
|
hr_HR.ISO-8859-2 # once it is fixed: cs_CZ.ISO-8859-2
|
||||||
test-input-data = $(addsuffix .in, $(basename $(test-input)))
|
test-input-data = $(addsuffix .in, $(basename $(test-input)))
|
||||||
@ -56,7 +57,7 @@ distribute := CHECKSUMS README SUPPORTED ChangeLog \
|
|||||||
$(charmaps) $(locales) $(repertoiremaps) \
|
$(charmaps) $(locales) $(repertoiremaps) \
|
||||||
tst-rpmatch.sh tst-locale.sh tst-fmon.sh sort-test.sh \
|
tst-rpmatch.sh tst-locale.sh tst-fmon.sh sort-test.sh \
|
||||||
tst-fmon.data $(test-input-data) $(ld-test-srcs) \
|
tst-fmon.data $(test-input-data) $(ld-test-srcs) \
|
||||||
th_TH.in cs_CZ.in
|
th_TH.in cs_CZ.in tst-mbswcs.sh
|
||||||
|
|
||||||
# Get $(inst_i18ndir) defined.
|
# Get $(inst_i18ndir) defined.
|
||||||
include ../Makeconfig
|
include ../Makeconfig
|
||||||
@ -75,8 +76,10 @@ $(inst_i18ndir)/repertoiremaps/%: repertoiremaps/% $(+force); $(do-install)
|
|||||||
|
|
||||||
ifeq (no,$(cross-compiling))
|
ifeq (no,$(cross-compiling))
|
||||||
ifeq (yes,$(build-shared))
|
ifeq (yes,$(build-shared))
|
||||||
.PHONY: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-tst-trans
|
.PHONY: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-tst-trans \
|
||||||
tests: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-tst-trans
|
do-tst-mbswcs
|
||||||
|
tests: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-tst-trans \
|
||||||
|
do-tst-mbswcs
|
||||||
do-collate-test: sort-test.sh $(objpfx)collate-test $(objpfx)xfrm-test \
|
do-collate-test: sort-test.sh $(objpfx)collate-test $(objpfx)xfrm-test \
|
||||||
$(test-input-data)
|
$(test-input-data)
|
||||||
$(SHELL) -e $< $(common-objpfx) $(test-input)
|
$(SHELL) -e $< $(common-objpfx) $(test-input)
|
||||||
@ -88,6 +91,8 @@ do-tst-rpmatch: tst-rpmatch.sh $(objpfx)tst-rpmatch do-tst-fmon
|
|||||||
$(SHELL) -e $< $(common-objpfx)
|
$(SHELL) -e $< $(common-objpfx)
|
||||||
do-tst-trans: tst-trans.sh $(objpfx)tst-trans
|
do-tst-trans: tst-trans.sh $(objpfx)tst-trans
|
||||||
$(SHELL) -e $< $(common-objpfx)
|
$(SHELL) -e $< $(common-objpfx)
|
||||||
|
do-tst-mbswcs: tst-mbswcs.sh $(objpfx)tst-mbswcs1
|
||||||
|
$(SHELL) -e $< $(common-objpfx)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
51
localedata/tst-mbswcs.sh
Executable file
51
localedata/tst-mbswcs.sh
Executable file
@ -0,0 +1,51 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Testing the implementation of the mb*towc*() and wc*tomb*() functions.
|
||||||
|
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||||
|
# This file is part of the GNU C Library.
|
||||||
|
#
|
||||||
|
# The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU Library General Public License as
|
||||||
|
# published by the Free Software Foundation; either version 2 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Library General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Library General Public
|
||||||
|
# License along with the GNU C Library; see the file COPYING.LIB. If
|
||||||
|
# not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
common_objpfx=$1; shift
|
||||||
|
|
||||||
|
generate_locale ()
|
||||||
|
{
|
||||||
|
charmap=$1
|
||||||
|
input=$2
|
||||||
|
out=$3
|
||||||
|
rep=$4
|
||||||
|
I18NPATH=. \
|
||||||
|
${common_objpfx}elf/ld.so --library-path $common_objpfx \
|
||||||
|
${common_objpfx}locale/localedef --quiet -c -f $charmap -i $input \
|
||||||
|
--repertoire-map $rep ${common_objpfx}localedata/$out
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Charmap: \"${charmap}\" Inputfile: \"${input}\"" \
|
||||||
|
"Outputdir: \"${out}\" failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_locale UTF8 de_DE de_DE.UTF-8 mnemonic.ds
|
||||||
|
|
||||||
|
status=0
|
||||||
|
|
||||||
|
# Run the test programs.
|
||||||
|
LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
|
||||||
|
${common_objpfx}elf/ld.so --library-path $common_objpfx \
|
||||||
|
${common_objpfx}localedata/tst-mbswcs1 \
|
||||||
|
> ${common_objpfx}localedata/tst-mbswcs.out || status=1
|
||||||
|
|
||||||
|
exit $status
|
63
localedata/tst-mbswcs1.c
Normal file
63
localedata/tst-mbswcs1.c
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/* Test restarting behaviour of mbrtowc.
|
||||||
|
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Bruno Haible <haible@ilog.fr>.
|
||||||
|
|
||||||
|
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 <string.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
#define show(expr, nexp, wcexp) \
|
||||||
|
n = expr; \
|
||||||
|
printf (#expr " -> %Zd", n); \
|
||||||
|
printf (", wc = %lu", (unsigned long int) wc); \
|
||||||
|
if (n != (size_t) nexp || wc != wcexp) \
|
||||||
|
{ \
|
||||||
|
printf (", expected %Zd and %lu", nexp, (unsigned long int) wcexp); \
|
||||||
|
result = 1; \
|
||||||
|
} \
|
||||||
|
putc ('\n', stdout)
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
unsigned char buf[6] = { 0x25, 0xe2, 0x82, 0xac, 0xce, 0xbb };
|
||||||
|
mbstate_t state;
|
||||||
|
wchar_t wc = 42;
|
||||||
|
size_t n;
|
||||||
|
int result = 0;
|
||||||
|
const char *used_locale;
|
||||||
|
|
||||||
|
setlocale (LC_CTYPE, "de_DE.UTF-8");
|
||||||
|
/* Double check. */
|
||||||
|
used_locale = setlocale (LC_CTYPE, NULL);
|
||||||
|
printf ("used locale: \"%s\"\n", used_locale);
|
||||||
|
result = strcmp (used_locale, "de_DE.UTF-8");
|
||||||
|
|
||||||
|
memset (&state, '\0', sizeof (state));
|
||||||
|
|
||||||
|
show (mbrtowc (&wc, buf + 0, 1, &state), 1, 37);
|
||||||
|
show (mbrtowc (&wc, buf + 1, 1, &state), -2, 37);
|
||||||
|
show (mbrtowc (&wc, buf + 2, 3, &state), 2, 8364);
|
||||||
|
show (mbrtowc (&wc, buf + 4, 1, &state), -2, 8364);
|
||||||
|
show (mbrtowc (&wc, buf + 5, 1, &state), 1, 955);
|
||||||
|
show (mbrtowc (&wc, buf + 5, 1, &state), -1, 955);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
@ -279,29 +279,21 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
|
|||||||
unsigned short port;
|
unsigned short port;
|
||||||
|
|
||||||
cb = (struct nis_cb *) calloc (1, sizeof (struct nis_cb));
|
cb = (struct nis_cb *) calloc (1, sizeof (struct nis_cb));
|
||||||
if (__builtin_expect (cb == NULL, ))
|
if (__builtin_expect (cb == NULL, 0))
|
||||||
{
|
goto failed;
|
||||||
syslog (LOG_ERR, "NIS+: out of memory allocating callback");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
cb->serv = (nis_server *) calloc (1, sizeof (nis_server));
|
cb->serv = (nis_server *) calloc (1, sizeof (nis_server));
|
||||||
if (__builtin_expect (cb->serv == NULL, 0))
|
if (__builtin_expect (cb->serv == NULL, 0))
|
||||||
{
|
goto failed;
|
||||||
free (cb);
|
|
||||||
syslog (LOG_ERR, "NIS+: out of memory allocating callback");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
cb->serv->name = strdup (nis_local_principal ());
|
cb->serv->name = strdup (nis_local_principal ());
|
||||||
if (__builtin_expect (cb->serv->name == NULL, 0))
|
if (__builtin_expect (cb->serv->name == NULL, 0))
|
||||||
return NIS_NOMEMORY;
|
goto failed;
|
||||||
cb->serv->ep.ep_val = (endpoint *) calloc (2, sizeof (endpoint));
|
cb->serv->ep.ep_val = (endpoint *) calloc (2, sizeof (endpoint));
|
||||||
if (__builtin_expect (cb->serv->ep.ep_val == NULL, 0))
|
if (__builtin_expect (cb->serv->ep.ep_val == NULL, 0))
|
||||||
return NIS_NOMEMORY;
|
goto failed;
|
||||||
cb->serv->ep.ep_len = 1;
|
cb->serv->ep.ep_len = 1;
|
||||||
cb->serv->ep.ep_val[0].family = strdup ("inet");
|
cb->serv->ep.ep_val[0].family = strdup ("inet");
|
||||||
if (__builtin_expect (cb->serv->ep.ep_val[0].family == NULL, 0))
|
if (__builtin_expect (cb->serv->ep.ep_val[0].family == NULL, 0))
|
||||||
return NIS_NOMEMORY;
|
goto failed;
|
||||||
cb->callback = callback;
|
cb->callback = callback;
|
||||||
cb->userdata = userdata;
|
cb->userdata = userdata;
|
||||||
|
|
||||||
@ -331,18 +323,11 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & USE_DGRAM)
|
cb->serv->ep.ep_val[0].proto = strdup ((flags & USE_DGRAM) ? "udp" : "tcp");
|
||||||
{
|
|
||||||
cb->serv->ep.ep_val[0].proto = strdup ("udp");
|
|
||||||
cb->xprt = svcudp_bufcreate (sock, 100, 8192);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cb->serv->ep.ep_val[0].proto = strdup ("tcp");
|
|
||||||
cb->xprt = svctcp_create (sock, 100, 8192);
|
|
||||||
}
|
|
||||||
if (__builtin_expect (cb->serv->ep.ep_val[0].proto == NULL, 0))
|
if (__builtin_expect (cb->serv->ep.ep_val[0].proto == NULL, 0))
|
||||||
return NIS_NOMEMORY;
|
goto failed;
|
||||||
|
cb->xprt = (flags & USE_DGRAM) ? svcudp_bufcreate (sock, 100, 8192) :
|
||||||
|
svctcp_create (sock, 100, 8192);
|
||||||
cb->sock = cb->xprt->xp_sock;
|
cb->sock = cb->xprt->xp_sock;
|
||||||
if (!svc_register (cb->xprt, CB_PROG, CB_VERS, cb_prog_1, 0))
|
if (!svc_register (cb->xprt, CB_PROG, CB_VERS, cb_prog_1, 0))
|
||||||
{
|
{
|
||||||
@ -372,6 +357,19 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
|
|||||||
cb->serv->ep.ep_val[0].uaddr = strdup (addr);
|
cb->serv->ep.ep_val[0].uaddr = strdup (addr);
|
||||||
|
|
||||||
return cb;
|
return cb;
|
||||||
|
|
||||||
|
failed:
|
||||||
|
if (cb)
|
||||||
|
{
|
||||||
|
if (cb->serv)
|
||||||
|
{
|
||||||
|
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
||||||
|
free (cb->serv);
|
||||||
|
}
|
||||||
|
free (cb);
|
||||||
|
}
|
||||||
|
syslog (LOG_ERR, "NIS+: out of memory allocating callback");
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nis_error
|
nis_error
|
||||||
|
Loading…
Reference in New Issue
Block a user