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>
|
||||
|
||||
* resolv/inet_pton.c (inet_pton4): Disallow octal numbers. Reported
|
||||
@ -10,7 +23,7 @@
|
||||
* sysdeps/posix/getaddrinfo.c (gaih_inet): Recognize all the IPv4
|
||||
numeric address formats inet_addr knows.
|
||||
(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
|
||||
string is not just a number. Remove useless freeaddrinfo call.
|
||||
* 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.
|
||||
|
||||
# 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
|
||||
|
||||
tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \
|
||||
tst-wcrtomb tst-wcpncpy
|
||||
tst-wcrtomb tst-wcpncpy tst-mbsrtowcs
|
||||
|
||||
include ../Rules
|
||||
|
||||
|
@ -102,18 +102,36 @@ __mbsrtowcs_l (dst, src, len, ps, l)
|
||||
/* This code is based on the safe assumption that all internal
|
||||
multi-byte encodings use the NUL byte only to mark the end
|
||||
of the string. */
|
||||
const unsigned char *srcp = (const unsigned char *) *src;
|
||||
const unsigned char *srcend;
|
||||
|
||||
srcend = (const unsigned char *) (*src
|
||||
+ __strnlen (*src, len * MB_CUR_MAX)
|
||||
+ 1);
|
||||
|
||||
data.__outbuf = (unsigned char *) dst;
|
||||
data.__outbufend = data.__outbuf + len * sizeof (wchar_t);
|
||||
|
||||
status = __GCONV_FULL_OUTPUT;
|
||||
|
||||
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, (const unsigned char **) src, srcend,
|
||||
NULL, &non_reversible, 0, 1));
|
||||
(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;
|
||||
|
||||
|
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