diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-05-15 21:17:11 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-05-15 21:17:11 +0000 |
commit | e3e0a182a7dd19c9e5186d5f5963f584b0eb373a (patch) | |
tree | a1eafeb7c1276d93d32680134e82af57406b8aba /iconv | |
parent | bd687f7ab43028d3722984a6bcf48115bb82d9bb (diff) | |
download | glibc-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.h | 9 | ||||
-rw-r--r-- | iconv/gconv_open.c | 6 | ||||
-rw-r--r-- | iconv/skeleton.c | 5 |
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; |