about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--iconv/skeleton.c19
2 files changed, 11 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 256bcef843..0ca80898dd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 1998-04-29  Ulrich Drepper  <drepper@cygnus.com>
 
+	* iconv/skeleton.c: Correct counting of actually converted
+	characters.
+
 	* intl/localealias.c (read_alias_file): Use unsigned char for
 	local variables.  Remove unused variable tp.
 	* intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
diff --git a/iconv/skeleton.c b/iconv/skeleton.c
index cc090afe75..596838de8b 100644
--- a/iconv/skeleton.c
+++ b/iconv/skeleton.c
@@ -223,11 +223,6 @@ FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,
     }
   else
     {
-      /* This variable is used to count the number of characters we
-         actually converted.  */
-      size_t converted = 0;
-      size_t last_converted;
-
       /* We preserve the initial values of the pointer variables.  */
       const char *inptr = *inbuf;
       char *outbuf = data->outbuf;
@@ -240,13 +235,15 @@ FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,
 
       do
 	{
+	  /* This variable is used to count the number of characters we
+	     actually converted.  */
+	  size_t converted = 0;
+
 	  /* Remember the start value for this round.  */
 	  inptr = *inbuf;
 	  /* The outbuf buffer is empty.  */
 	  outptr = outbuf;
 
-	  /* Save the state.  */
-	  last_converted = converted;
 #ifdef SAVE_RESET_STATE
 	  SAVE_RESET_STATE (1);
 #endif
@@ -274,6 +271,10 @@ FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,
 	    {
 	      /* Store information about how many bytes are available.  */
 	      data->outbuf = outbuf;
+
+	      /* Remember how many characters we converted.  */
+	      *written += converted;
+
 	      break;
 	    }
 
@@ -302,7 +303,6 @@ FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,
 		      outbuf = outptr;
 
 		      /* Reset the state.  */
-		      converted = last_converted;
 # ifdef SAVE_RESET_STATE
 		      SAVE_RESET_STATE (0);
 # endif
@@ -343,9 +343,6 @@ FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,
 	}
       while (status == GCONV_OK);
 
-      /* Remember how many characters we converted.  */
-      *written += converted;
-
 #ifdef END_LOOP
       END_LOOP
 #endif