diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | iconv/gconv_db.c | 22 |
2 files changed, 19 insertions, 6 deletions
@@ -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 { |