summaryrefslogtreecommitdiff
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)
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;