aboutsummaryrefslogtreecommitdiff
path: root/iconv
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-08-25 22:13:09 +0000
committerUlrich Drepper <drepper@redhat.com>2000-08-25 22:13:09 +0000
commitb572c2da318d45e89bec5425692be84a2ac27ed4 (patch)
tree2a71538bcc87638e30a7b6f47092a2a3645c5cb3 /iconv
parent0cdb4983fc3d3b97bebf8c466bdef6226b610996 (diff)
downloadglibc-b572c2da318d45e89bec5425692be84a2ac27ed4.zip
glibc-b572c2da318d45e89bec5425692be84a2ac27ed4.tar.gz
glibc-b572c2da318d45e89bec5425692be84a2ac27ed4.tar.bz2
Update.
2000-08-25 Ulrich Drepper <drepper@redhat.com> * locales/i18n (default_missing): Change back to only U003F.
Diffstat (limited to 'iconv')
-rw-r--r--iconv/gconv_trans.c4
-rw-r--r--iconv/loop.c11
-rw-r--r--iconv/skeleton.c17
3 files changed, 20 insertions, 12 deletions
diff --git a/iconv/gconv_trans.c b/iconv/gconv_trans.c
index bb908176..8c658b1 100644
--- a/iconv/gconv_trans.c
+++ b/iconv/gconv_trans.c
@@ -117,7 +117,7 @@ __gconv_transliterate (struct __gconv_step *step,
(step, step_data, &toinptr,
(const unsigned char *) &to_tbl[idx2 + len],
(unsigned char **) outbufstart,
- irreversible, 0, 0));
+ NULL, 0, 0));
if (res != __GCONV_ILLEGAL_INPUT)
{
/* If the conversion succeeds we have to increment the
@@ -200,7 +200,7 @@ __gconv_transliterate (struct __gconv_step *step,
(step, step_data, &toinptr,
(const unsigned char *) (default_missing + len),
(unsigned char **) outbufstart,
- irreversible, 0, 0));
+ NULL, 0, 0));
if (res != __GCONV_ILLEGAL_INPUT)
{
diff --git a/iconv/loop.c b/iconv/loop.c
index 9d168d8..3a2779e 100644
--- a/iconv/loop.c
+++ b/iconv/loop.c
@@ -170,7 +170,8 @@
/* To make it easier for the writers of the modules, we define a macro
to test whether we have to ignore errors. */
-#define ignore_errors_p() (flags & __GCONV_IGNORE_ERRORS)
+#define ignore_errors_p() \
+ (irreversible != NULL && (flags & __GCONV_IGNORE_ERRORS))
/* Error handling with transliteration/transcription function use and
@@ -181,6 +182,12 @@
struct __gconv_trans_data *trans; \
\
result = __GCONV_ILLEGAL_INPUT; \
+ \
+ if (irreversible == NULL) \
+ /* This means we are in call from __gconv_transliterate. In this \
+ case we are not doing any error recovery outself. */ \
+ break; \
+ \
/* First try the transliteration methods. */ \
for (trans = step_data->__trans; trans != NULL; trans = trans->__next) \
{ \
@@ -197,7 +204,7 @@
/* Next see whether we have to ignore the error. If not, stop. */ \
if (! ignore_errors_p ()) \
break; \
- \
+ \
/* When we come here it means we ignore the character. */ \
++*irreversible; \
inptr += Incr; \
diff --git a/iconv/skeleton.c b/iconv/skeleton.c
index e203f0f..76189b5 100644
--- a/iconv/skeleton.c
+++ b/iconv/skeleton.c
@@ -320,6 +320,7 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
/* This variable is used to count the number of characters we
actually converted. */
size_t lirreversible = 0;
+ size_t *lirreversiblep = irreversible ? &lirreversible : NULL;
#if defined _STRING_ARCH_unaligned \
|| MIN_NEEDED_FROM == 1 || MAX_NEEDED_FROM % MIN_NEEDED_FROM != 0 \
|| MIN_NEEDED_TO == 1 || MAX_NEEDED_TO % MIN_NEEDED_TO != 0
@@ -350,7 +351,7 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
# if MAX_NEEDED_FROM > 1
if (MAX_NEEDED_TO == 1 || FROM_DIRECTION)
status = SINGLE(FROM_LOOP) (step, data, inptrp, inend, &outbuf,
- outend, &lirreversible
+ outend, lirreversiblep
EXTRA_LOOP_ARGS);
# endif
# if MAX_NEEDED_FROM > 1 && MAX_NEEDED_TO > 1 && !ONE_DIRECTION
@@ -358,7 +359,7 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
# endif
# if MAX_NEEDED_TO > 1 && !ONE_DIRECTION
status = SINGLE(TO_LOOP) (step, data, inptrp, inend, &outbuf,
- outend, &lirreversible EXTRA_LOOP_ARGS);
+ outend, lirreversiblep EXTRA_LOOP_ARGS);
# endif
if (__builtin_expect (status, __GCONV_OK) != __GCONV_OK)
@@ -402,11 +403,11 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
if (FROM_DIRECTION)
/* Run the conversion loop. */
status = FROM_LOOP (step, data, inptrp, inend, &outbuf, outend,
- &lirreversible EXTRA_LOOP_ARGS);
+ lirreversiblep EXTRA_LOOP_ARGS);
else
/* Run the conversion loop. */
status = TO_LOOP (step, data, inptrp, inend, &outbuf, outend,
- &lirreversible EXTRA_LOOP_ARGS);
+ lirreversiblep EXTRA_LOOP_ARGS);
}
#if !defined _STRING_ARCH_unaligned \
&& MIN_NEEDED_FROM != 1 && MAX_NEEDED_FROM % MIN_NEEDED_FROM == 0 \
@@ -417,13 +418,13 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
/* Run the conversion loop. */
status = GEN_unaligned (FROM_LOOP) (step, data, inptrp, inend,
&outbuf, outend,
- &lirreversible
+ lirreversiblep
EXTRA_LOOP_ARGS);
else
/* Run the conversion loop. */
status = GEN_unaligned (TO_LOOP) (step, data, inptrp, inend,
&outbuf, outend,
- &lirreversible
+ lirreversiblep
EXTRA_LOOP_ARGS);
}
#endif
@@ -498,7 +499,7 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
(const unsigned char *) inend,
(unsigned char **) &outbuf,
(unsigned char *) outerr,
- &lirreversible EXTRA_LOOP_ARGS);
+ lirreversiblep EXTRA_LOOP_ARGS);
else
/* Run the conversion loop. */
nstatus = TO_LOOP (step, data,
@@ -506,7 +507,7 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
(const unsigned char *) inend,
(unsigned char **) &outbuf,
(unsigned char *) outerr,
- &lirreversible EXTRA_LOOP_ARGS);
+ lirreversiblep EXTRA_LOOP_ARGS);
/* We must run out of output buffer space in this
rerun. */