about summary refs log tree commit diff
path: root/iconv
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-05-15 21:17:11 +0000
committerUlrich Drepper <drepper@redhat.com>1998-05-15 21:17:11 +0000
commite3e0a182a7dd19c9e5186d5f5963f584b0eb373a (patch)
treea1eafeb7c1276d93d32680134e82af57406b8aba /iconv
parentbd687f7ab43028d3722984a6bcf48115bb82d9bb (diff)
downloadglibc-e3e0a182a7dd19c9e5186d5f5963f584b0eb373a.tar.gz
glibc-e3e0a182a7dd19c9e5186d5f5963f584b0eb373a.tar.xz
glibc-e3e0a182a7dd19c9e5186d5f5963f584b0eb373a.zip
Update.
1998-05-15 21:07  Ulrich Drepper  <drepper@cygnus.com>

	* iconv/gconv.h (gconv_step_data): Add new fields invocation_counter
	and internal_use.
	* iconv/gconv_open.c (__gconv_open): Initialize invocation_counter
	and internal_use.
	* iconv/skeleton.c: Increment invocation_counter.
	* iconvdata/iso-2022-kr.c: When used in iconv() emit designator
	sequence first.

	* iconv/skeleton.c (FROM_DIRECTION): Completely embrace expression.
	* iconvdata/iso-2022-jp.c: Likewise.
	* iconvdata/iso646.c: Likewise.

	* iconvdata/Makefile: Correct rpath definition for ISO-2022-KR.
Diffstat (limited to 'iconv')
-rw-r--r--iconv/gconv.h9
-rw-r--r--iconv/gconv_open.c6
-rw-r--r--iconv/skeleton.c5
3 files changed, 19 insertions, 1 deletions
diff --git a/iconv/gconv.h b/iconv/gconv.h
index b359c92c62..1e19c9650a 100644
--- a/iconv/gconv.h
+++ b/iconv/gconv.h
@@ -100,8 +100,17 @@ struct gconv_step_data
   char *outbuf;		/* Output buffer for this step.  */
   char *outbufend;	/* Address of first byte after the output buffer.  */
 
+  /* Is this the last module in the chain.  */
   int is_last;
 
+  /* Counter for number of invocations of the module function for this
+     desriptor.  */
+  int invocation_counter;
+
+  /* Flag whether this is an internal use of the module (in the mb*towc*
+     and wc*tomb* functions) or regular with iconv(3).  */
+  int internal_use;
+
   mbstate_t *statep;
   mbstate_t __state;	/* This element should not be used directly by
 			   any module; always use STATEP!  */
diff --git a/iconv/gconv_open.c b/iconv/gconv_open.c
index d7e0191cca..fb5f88b9a3 100644
--- a/iconv/gconv_open.c
+++ b/iconv/gconv_open.c
@@ -65,6 +65,12 @@ __gconv_open (const char *toset, const char *fromset, gconv_t *handle)
 		     buffer.  */
 		  data[cnt].is_last = cnt == nsteps - 1;
 
+		  /* Reset the counter.  */
+		  data[cnt].invocation_counter = 0;
+
+		  /* It's a regular use.  */
+		  data[cnt].internal_use = 0;
+
 		  /* We use the `mbstate_t' member in DATA.  */
 		  data[cnt].statep = &data[cnt].__state;
 
diff --git a/iconv/skeleton.c b/iconv/skeleton.c
index f0445f1408..418247f769 100644
--- a/iconv/skeleton.c
+++ b/iconv/skeleton.c
@@ -90,7 +90,7 @@ static int from_object;
 static int to_object;
 
 # ifndef FROM_DIRECTION
-#  define FROM_DIRECTION step->data == &from_object
+#  define FROM_DIRECTION (step->data == &from_object)
 # endif
 #else
 # ifndef FROM_DIRECTION
@@ -346,6 +346,9 @@ FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,
 #ifdef END_LOOP
       END_LOOP
 #endif
+
+      /* We finished one use of this step.  */
+      ++data->invocation_counter;
     }
 
   return status;