aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--iconv/gconv_db.c22
2 files changed, 19 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 26ee9bd..bf27373 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
1998-12-17 Ulrich Drepper <drepper@cygnus.com>
+ * iconv/gconv_db.c (gen_steps): Respect error return value from
+ init functions and abort.
+
* iconvdata/iso646.c: Recognize NF_Z_62-010_1973 as charset name.
1998-12-17 H.J. Lu <hjl@gnu.org>
diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c
index be2b7fa..f5a67ff 100644
--- a/iconv/gconv_db.c
+++ b/iconv/gconv_db.c
@@ -181,6 +181,7 @@ gen_steps (struct derivation_step *best, const char *toset,
{
int failed = 0;
+ status = GCONV_OK;
*nsteps = step_cnt;
current = best;
while (step_cnt-- > 0)
@@ -220,7 +221,18 @@ gen_steps (struct derivation_step *best, const char *toset,
/* Call the init function. */
if (result[step_cnt].init_fct != NULL)
- _CALL_DL_FCT (result[step_cnt].init_fct, (&result[step_cnt]));
+ {
+ status = _CALL_DL_FCT (result[step_cnt].init_fct,
+ (&result[step_cnt]));
+
+ if (status != GCONV_OK)
+ {
+ failed = 1;
+ /* Make sure we unload this modules. */
+ --step_cnt;
+ break;
+ }
+ }
current = current->last;
}
@@ -239,13 +251,11 @@ gen_steps (struct derivation_step *best, const char *toset,
free (result);
*nsteps = 0;
*handle = NULL;
- status = GCONV_NOCONV;
+ if (status == GCONV_OK)
+ status = GCONV_NOCONV;
}
else
- {
- *handle = result;
- status = GCONV_OK;
- }
+ *handle = result;
}
else
{