From c7ec9d75a79e1ed2d558447ba788318d3f1fb76c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 17 Dec 1998 11:18:37 +0000 Subject: Update. * iconv/gconv_db.c (gen_steps): Respect error return value from init functions and abort. --- iconv/gconv_db.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'iconv/gconv_db.c') diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c index be2b7fa233..f5a67ffbab 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 { -- cgit v1.2.3