mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
Update.
Ulrich Drepper <drepper@redhat.com> * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Don't read more input character than necessary. 2004-08-05 Ulrich Drepper <drepper@redhat.com> * wcsmbs/Makefile (tests): Add tst-mbsrtowcs. * wcsmbs/tst-mbsrtowcs.c: New file. * po/fr.po: Update from translation team. 2004-08-04 Jakub Jelinek <jakub@redhat.com> If neither IPv4 nor IPv6 interface is present we cannot make any
This commit is contained in:
parent
08bcfb594b
commit
d012b7df7e
15
ChangeLog
15
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
2004-08-04 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Don't read more input
|
||||||
|
character than necessary.
|
||||||
|
|
||||||
|
2004-08-05 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* wcsmbs/Makefile (tests): Add tst-mbsrtowcs.
|
||||||
|
* wcsmbs/tst-mbsrtowcs.c: New file.
|
||||||
|
|
||||||
|
* po/fr.po: Update from translation team.
|
||||||
|
|
||||||
2004-08-04 Jakub Jelinek <jakub@redhat.com>
|
2004-08-04 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* resolv/inet_pton.c (inet_pton4): Disallow octal numbers. Reported
|
* resolv/inet_pton.c (inet_pton4): Disallow octal numbers. Reported
|
||||||
@ -10,7 +23,7 @@
|
|||||||
* sysdeps/posix/getaddrinfo.c (gaih_inet): Recognize all the IPv4
|
* sysdeps/posix/getaddrinfo.c (gaih_inet): Recognize all the IPv4
|
||||||
numeric address formats inet_addr knows.
|
numeric address formats inet_addr knows.
|
||||||
(getaddrinfo): Allow AI_NUMERICSERV flag.
|
(getaddrinfo): Allow AI_NUMERICSERV flag.
|
||||||
If neither IPv4 nor IPv6 inerface is present we cannot make any
|
If neither IPv4 nor IPv6 interface is present we cannot make any
|
||||||
decision for AI_ADDRCONFIG. Fail if AI_NUMERICSERV is set and the
|
decision for AI_ADDRCONFIG. Fail if AI_NUMERICSERV is set and the
|
||||||
string is not just a number. Remove useless freeaddrinfo call.
|
string is not just a number. Remove useless freeaddrinfo call.
|
||||||
* resolv/netdb.h (AI_NUMERICSERV): Define.
|
* resolv/netdb.h (AI_NUMERICSERV): Define.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 1995-2000, 2002, 2003 Free Software Foundation, Inc.
|
# Copyright (C) 1995-2000, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||||
# This file is part of the GNU C Library.
|
# This file is part of the GNU C Library.
|
||||||
|
|
||||||
# The GNU C Library is free software; you can redistribute it and/or
|
# The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -40,7 +40,7 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
|
|||||||
wcsmbsload mbsrtowcs_l
|
wcsmbsload mbsrtowcs_l
|
||||||
|
|
||||||
tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \
|
tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \
|
||||||
tst-wcrtomb tst-wcpncpy
|
tst-wcrtomb tst-wcpncpy tst-mbsrtowcs
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
|
||||||
|
@ -102,18 +102,36 @@ __mbsrtowcs_l (dst, src, len, ps, l)
|
|||||||
/* This code is based on the safe assumption that all internal
|
/* This code is based on the safe assumption that all internal
|
||||||
multi-byte encodings use the NUL byte only to mark the end
|
multi-byte encodings use the NUL byte only to mark the end
|
||||||
of the string. */
|
of the string. */
|
||||||
|
const unsigned char *srcp = (const unsigned char *) *src;
|
||||||
const unsigned char *srcend;
|
const unsigned char *srcend;
|
||||||
|
|
||||||
srcend = (const unsigned char *) (*src
|
|
||||||
+ __strnlen (*src, len * MB_CUR_MAX)
|
|
||||||
+ 1);
|
|
||||||
|
|
||||||
data.__outbuf = (unsigned char *) dst;
|
data.__outbuf = (unsigned char *) dst;
|
||||||
data.__outbufend = data.__outbuf + len * sizeof (wchar_t);
|
data.__outbufend = data.__outbuf + len * sizeof (wchar_t);
|
||||||
|
|
||||||
status = DL_CALL_FCT (towc->__fct,
|
status = __GCONV_FULL_OUTPUT;
|
||||||
(towc, &data, (const unsigned char **) src, srcend,
|
|
||||||
NULL, &non_reversible, 0, 1));
|
while (len > 0)
|
||||||
|
{
|
||||||
|
/* Pessimistic guess as to how much input we can use. In the
|
||||||
|
worst case we need one input byte for one output wchar_t. */
|
||||||
|
srcend = srcp + __strnlen (srcp, len) + 1;
|
||||||
|
|
||||||
|
status = DL_CALL_FCT (towc->__fct,
|
||||||
|
(towc, &data, &srcp, srcend, NULL,
|
||||||
|
&non_reversible, 0, 1));
|
||||||
|
if ((status != __GCONV_EMPTY_INPUT
|
||||||
|
&& status != __GCONV_INCOMPLETE_INPUT)
|
||||||
|
/* Not all input read. */
|
||||||
|
|| srcp != srcend
|
||||||
|
/* Reached the end of the input. */
|
||||||
|
|| srcend[-1] == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
len = (wchar_t *) data.__outbufend - (wchar_t *) data.__outbuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make the end if the input known to the caller. */
|
||||||
|
*src = srcp;
|
||||||
|
|
||||||
result = (wchar_t *) data.__outbuf - dst;
|
result = (wchar_t *) data.__outbuf - dst;
|
||||||
|
|
||||||
|
65
wcsmbs/tst-mbsrtowcs.c
Normal file
65
wcsmbs/tst-mbsrtowcs.c
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/* Test NUL handling of mbsrtowcs.
|
||||||
|
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 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
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; 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>
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
const unsigned char buf[] = { 'a', 'b', '\0', 'c', 'd', '\0', 'e' };
|
||||||
|
wchar_t out[sizeof (buf)];
|
||||||
|
memset (out, '\xff', sizeof (out));
|
||||||
|
|
||||||
|
mbstate_t state;
|
||||||
|
memset (&state, '\0', sizeof (state));
|
||||||
|
|
||||||
|
const char *in = buf;
|
||||||
|
size_t n = mbsrtowcs (out, &in, sizeof (out) / sizeof (wchar_t), &state);
|
||||||
|
|
||||||
|
int result = 0;
|
||||||
|
if (n != 2)
|
||||||
|
{
|
||||||
|
printf ("n = %zu, expected 2\n", n);
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
if (in != NULL)
|
||||||
|
{
|
||||||
|
printf ("in = %p, expected NULL\n", in);
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
if (out[0] != L'a')
|
||||||
|
{
|
||||||
|
printf ("out[0] = L'%lc', expected L'a'\n", (wint_t) out[0]);
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
if (out[1] != L'b')
|
||||||
|
{
|
||||||
|
printf ("out[1] = L'%lc', expected L'b'\n", (wint_t) out[1]);
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
if (out[2] != L'\0')
|
||||||
|
{
|
||||||
|
printf ("out[2] = L'%lc', expected L'\\0'\n", (wint_t) out[2]);
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user