summary refs log tree commit diff
path: root/iconv/skeleton.c
diff options
context:
space:
mode:
Diffstat (limited to 'iconv/skeleton.c')
-rw-r--r--iconv/skeleton.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/iconv/skeleton.c b/iconv/skeleton.c
index 350b532e3a..726a76f00e 100644
--- a/iconv/skeleton.c
+++ b/iconv/skeleton.c
@@ -261,6 +261,9 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
 			      data->__statep, step->__data, &converted
 			      EXTRA_LOOP_ARGS);
 
+	  /* We finished one use of the loops.  */
+	  ++data->__invocation_counter;
+
 	  /* If this is the last step leave the loop, there is nothing
              we can do.  */
 	  if (data->__is_last)
@@ -324,6 +327,11 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
 			 rerun.  */
 		      assert (outbuf == outerr);
 		      assert (nstatus == __GCONV_FULL_OUTPUT);
+
+		      /* If we haven't consumed a single byte decrement
+			 the invocation counter.  */
+		      if (outbuf == outstart)
+			--data->__invocation_counter;
 #endif	/* reset input buffer */
 		    }
 
@@ -336,9 +344,6 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
 		if (status == __GCONV_FULL_OUTPUT)
 		  status = __GCONV_OK;
 	    }
-
-	  /* We finished one use of the loops.  */
-	  ++data->__invocation_counter;
 	}
       while (status == __GCONV_OK);