(LOOPFCT): First test for empty input then for full output buffer.
authordrepper <drepper>
Wed, 20 Nov 2002 23:38:39 +0000 (23:38 +0000)
committerdrepper <drepper>
Wed, 20 Nov 2002 23:38:39 +0000 (23:38 +0000)
iconv/loop.c

index 2fb73da..deb0173 100644 (file)
@@ -282,6 +282,14 @@ FCTNAME (LOOPFCT) (struct __gconv_step *step,
       /* `if' cases for MIN_NEEDED_OUTPUT ==/!= 1 is made to help the
         compiler generating better code.  They will be optimized away
         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
           && __builtin_expect (outptr + MIN_NEEDED_OUTPUT > outend, 0))
          || (MIN_NEEDED_OUTPUT == 1
@@ -291,14 +299,6 @@ FCTNAME (LOOPFCT) (struct __gconv_step *step,
          result = __GCONV_FULL_OUTPUT;
          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
         RESULT set to GCONV_INCOMPLETE_INPUT (if the size of the