summary refs log tree commit diff
path: root/iconv/gconv_simple.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-11-20 23:42:04 +0000
committerUlrich Drepper <drepper@redhat.com>2002-11-20 23:42:04 +0000
commiteb9dc2a22dbce7b03fb8efbdc67724ffd9b7d85d (patch)
tree6fc48c9f4f1c8e0a1d8a2cf975929aba2c858c85 /iconv/gconv_simple.c
parent218d76e03413b532f72d47d2695be049d6a2aa64 (diff)
downloadglibc-eb9dc2a22dbce7b03fb8efbdc67724ffd9b7d85d.tar.gz
glibc-eb9dc2a22dbce7b03fb8efbdc67724ffd9b7d85d.tar.xz
glibc-eb9dc2a22dbce7b03fb8efbdc67724ffd9b7d85d.zip
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.
Diffstat (limited to 'iconv/gconv_simple.c')
-rw-r--r--iconv/gconv_simple.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/iconv/gconv_simple.c b/iconv/gconv_simple.c
index fbdac832e0..35346aa498 100644
--- a/iconv/gconv_simple.c
+++ b/iconv/gconv_simple.c
@@ -489,12 +489,15 @@ internal_ucs4le_loop_unaligned (struct __gconv_step *step,
 # endif
 
   /* Determine the status.  */
-  if (*inptrp + 4 > inend)
+  if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
-  else if (*outptrp + 4 > outend)
-    result = __GCONV_FULL_OUTPUT;
-  else
+  else if (*inptrp + 4 > inend)
     result = __GCONV_INCOMPLETE_INPUT;
+  else
+    {
+      assert (*outptrp + 4 > outend);
+      result = __GCONV_FULL_OUTPUT;
+    }
 
   return result;
 }
@@ -609,10 +612,13 @@ ucs4le_internal_loop (struct __gconv_step *step,
   /* Determine the status.  */
   if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
-  else if (*outptrp + 4 > outend)
-    result = __GCONV_FULL_OUTPUT;
-  else
+  else if (*inptrp + 4 > inend)
     result = __GCONV_INCOMPLETE_INPUT;
+  else
+    {
+      assert (*outptrp + 4 > outend);
+      result = __GCONV_FULL_OUTPUT;
+    }
 
   return result;
 }
@@ -678,10 +684,13 @@ ucs4le_internal_loop_unaligned (struct __gconv_step *step,
   /* Determine the status.  */
   if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
-  else if (*outptrp + 4 > outend)
-    result = __GCONV_FULL_OUTPUT;
-  else
+  else if (*inptrp + 4 > inend)
     result = __GCONV_INCOMPLETE_INPUT;
+  else
+    {
+      assert (*outptrp + 4 > outend);
+      result = __GCONV_FULL_OUTPUT;
+    }
 
   return result;
 }