mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
Update.
* iconv/gconv_simple.c (internal_ucs4le_loop_unaligned): Return __GCONV_EMPTY_INPUT only if input is really empty. Otherwise __GCONV_INCOMPLETE_INPUT. (ucs4le_internal_loop): Likewise. (ucs4le_internal_loop_unaligned): Likewise. * iconvdata/unicode.c (PREPARE_LOOP): Likewise. * iconvdata/utf-16.c (PREPARE_LOOP): Likewise. * iconvdata/utf-32.c (PREPARE_LOOP): Likewise. * iconv/loop.c (LOOPFCT): First test for empty input then for full output buffer.
This commit is contained in:
12
ChangeLog
12
ChangeLog
@@ -1,5 +1,17 @@
|
|||||||
2002-11-20 Ulrich Drepper <drepper@redhat.com>
|
2002-11-20 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* iconv/gconv_simple.c (internal_ucs4le_loop_unaligned): Return
|
||||||
|
__GCONV_EMPTY_INPUT only if input is really empty. Otherwise
|
||||||
|
__GCONV_INCOMPLETE_INPUT.
|
||||||
|
(ucs4le_internal_loop): Likewise.
|
||||||
|
(ucs4le_internal_loop_unaligned): Likewise.
|
||||||
|
* iconvdata/unicode.c (PREPARE_LOOP): Likewise.
|
||||||
|
* iconvdata/utf-16.c (PREPARE_LOOP): Likewise.
|
||||||
|
* iconvdata/utf-32.c (PREPARE_LOOP): Likewise.
|
||||||
|
|
||||||
|
* iconv/loop.c (LOOPFCT): First test for empty input then for full
|
||||||
|
output buffer.
|
||||||
|
|
||||||
* inet/getnameinfo.c: Use extend_alloca where appropriate.
|
* inet/getnameinfo.c: Use extend_alloca where appropriate.
|
||||||
* sysdeps/posix/getaddrinfo.c: Likewise.
|
* sysdeps/posix/getaddrinfo.c: Likewise.
|
||||||
|
|
||||||
|
@@ -489,12 +489,15 @@ internal_ucs4le_loop_unaligned (struct __gconv_step *step,
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Determine the status. */
|
/* Determine the status. */
|
||||||
if (*inptrp + 4 > inend)
|
if (*inptrp == inend)
|
||||||
result = __GCONV_EMPTY_INPUT;
|
result = __GCONV_EMPTY_INPUT;
|
||||||
else if (*outptrp + 4 > outend)
|
else if (*inptrp + 4 > inend)
|
||||||
result = __GCONV_FULL_OUTPUT;
|
|
||||||
else
|
|
||||||
result = __GCONV_INCOMPLETE_INPUT;
|
result = __GCONV_INCOMPLETE_INPUT;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert (*outptrp + 4 > outend);
|
||||||
|
result = __GCONV_FULL_OUTPUT;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -609,10 +612,13 @@ ucs4le_internal_loop (struct __gconv_step *step,
|
|||||||
/* Determine the status. */
|
/* Determine the status. */
|
||||||
if (*inptrp == inend)
|
if (*inptrp == inend)
|
||||||
result = __GCONV_EMPTY_INPUT;
|
result = __GCONV_EMPTY_INPUT;
|
||||||
else if (*outptrp + 4 > outend)
|
else if (*inptrp + 4 > inend)
|
||||||
result = __GCONV_FULL_OUTPUT;
|
|
||||||
else
|
|
||||||
result = __GCONV_INCOMPLETE_INPUT;
|
result = __GCONV_INCOMPLETE_INPUT;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert (*outptrp + 4 > outend);
|
||||||
|
result = __GCONV_FULL_OUTPUT;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -678,10 +684,13 @@ ucs4le_internal_loop_unaligned (struct __gconv_step *step,
|
|||||||
/* Determine the status. */
|
/* Determine the status. */
|
||||||
if (*inptrp == inend)
|
if (*inptrp == inend)
|
||||||
result = __GCONV_EMPTY_INPUT;
|
result = __GCONV_EMPTY_INPUT;
|
||||||
else if (*outptrp + 4 > outend)
|
else if (*inptrp + 4 > inend)
|
||||||
result = __GCONV_FULL_OUTPUT;
|
|
||||||
else
|
|
||||||
result = __GCONV_INCOMPLETE_INPUT;
|
result = __GCONV_INCOMPLETE_INPUT;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert (*outptrp + 4 > outend);
|
||||||
|
result = __GCONV_FULL_OUTPUT;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
16
iconv/loop.c
16
iconv/loop.c
@@ -282,6 +282,14 @@ FCTNAME (LOOPFCT) (struct __gconv_step *step,
|
|||||||
/* `if' cases for MIN_NEEDED_OUTPUT ==/!= 1 is made to help the
|
/* `if' cases for MIN_NEEDED_OUTPUT ==/!= 1 is made to help the
|
||||||
compiler generating better code. They will be optimized away
|
compiler generating better code. They will be optimized away
|
||||||
since MIN_NEEDED_OUTPUT is always a constant. */
|
since MIN_NEEDED_OUTPUT is always a constant. */
|
||||||
|
if (MIN_NEEDED_INPUT > 1
|
||||||
|
&& __builtin_expect (inptr + MIN_NEEDED_INPUT > inend, 0))
|
||||||
|
{
|
||||||
|
/* We don't have enough input for another complete input
|
||||||
|
character. */
|
||||||
|
result = __GCONV_INCOMPLETE_INPUT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
if ((MIN_NEEDED_OUTPUT != 1
|
if ((MIN_NEEDED_OUTPUT != 1
|
||||||
&& __builtin_expect (outptr + MIN_NEEDED_OUTPUT > outend, 0))
|
&& __builtin_expect (outptr + MIN_NEEDED_OUTPUT > outend, 0))
|
||||||
|| (MIN_NEEDED_OUTPUT == 1
|
|| (MIN_NEEDED_OUTPUT == 1
|
||||||
@@ -291,14 +299,6 @@ FCTNAME (LOOPFCT) (struct __gconv_step *step,
|
|||||||
result = __GCONV_FULL_OUTPUT;
|
result = __GCONV_FULL_OUTPUT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (MIN_NEEDED_INPUT > 1
|
|
||||||
&& __builtin_expect (inptr + MIN_NEEDED_INPUT > inend, 0))
|
|
||||||
{
|
|
||||||
/* We don't have enough input for another complete input
|
|
||||||
character. */
|
|
||||||
result = __GCONV_INCOMPLETE_INPUT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Here comes the body the user provides. It can stop with
|
/* Here comes the body the user provides. It can stop with
|
||||||
RESULT set to GCONV_INCOMPLETE_INPUT (if the size of the
|
RESULT set to GCONV_INCOMPLETE_INPUT (if the size of the
|
||||||
|
@@ -49,7 +49,8 @@
|
|||||||
{ \
|
{ \
|
||||||
/* We have to find out which byte order the file is encoded in. */ \
|
/* We have to find out which byte order the file is encoded in. */ \
|
||||||
if (inptr + 2 > inend) \
|
if (inptr + 2 > inend) \
|
||||||
return __GCONV_EMPTY_INPUT; \
|
return (inptr == inend \
|
||||||
|
? __GCONV_EMPTY_INPUT : __GCONV_INCOMPLETE_INPUT); \
|
||||||
\
|
\
|
||||||
if (get16u (inptr) == BOM) \
|
if (get16u (inptr) == BOM) \
|
||||||
/* Simply ignore the BOM character. */ \
|
/* Simply ignore the BOM character. */ \
|
||||||
|
@@ -51,7 +51,8 @@
|
|||||||
{ \
|
{ \
|
||||||
/* We have to find out which byte order the file is encoded in. */ \
|
/* We have to find out which byte order the file is encoded in. */ \
|
||||||
if (inptr + 2 > inend) \
|
if (inptr + 2 > inend) \
|
||||||
return __GCONV_EMPTY_INPUT; \
|
return (inptr == inend \
|
||||||
|
? __GCONV_EMPTY_INPUT : __GCONV_INCOMPLETE_INPUT); \
|
||||||
\
|
\
|
||||||
if (get16u (inptr) == BOM) \
|
if (get16u (inptr) == BOM) \
|
||||||
/* Simply ignore the BOM character. */ \
|
/* Simply ignore the BOM character. */ \
|
||||||
|
@@ -49,7 +49,8 @@
|
|||||||
{ \
|
{ \
|
||||||
/* We have to find out which byte order the file is encoded in. */ \
|
/* We have to find out which byte order the file is encoded in. */ \
|
||||||
if (inptr + 4 > inend) \
|
if (inptr + 4 > inend) \
|
||||||
return __GCONV_EMPTY_INPUT; \
|
return (inptr == inend \
|
||||||
|
? __GCONV_EMPTY_INPUT : __GCONV_INCOMPLETE_INPUT); \
|
||||||
\
|
\
|
||||||
if (get32u (inptr) == BOM) \
|
if (get32u (inptr) == BOM) \
|
||||||
/* Simply ignore the BOM character. */ \
|
/* Simply ignore the BOM character. */ \
|
||||||
|
@@ -270,7 +270,7 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp,
|
|||||||
int i, herrno; \
|
int i, herrno; \
|
||||||
size_t tmpbuflen; \
|
size_t tmpbuflen; \
|
||||||
struct hostent th; \
|
struct hostent th; \
|
||||||
char *tmpbuf = NULL; \
|
char *tmpbuf = NULL; \
|
||||||
tmpbuflen = 512; \
|
tmpbuflen = 512; \
|
||||||
no_data = 0; \
|
no_data = 0; \
|
||||||
do { \
|
do { \
|
||||||
|
Reference in New Issue
Block a user