diff options
Diffstat (limited to 'iconv/gconv_cache.c')
-rw-r--r-- | iconv/gconv_cache.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c index 79e5dde629..c6640759ec 100644 --- a/iconv/gconv_cache.c +++ b/iconv/gconv_cache.c @@ -177,13 +177,9 @@ find_module (const char *directory, const char *filename, { size_t dirlen = strlen (directory); size_t fnamelen = strlen (filename) + 1; - char *fullname; + char fullname[dirlen + fnamelen]; int status = __GCONV_NOCONV; - fullname = (char *) malloc (dirlen + fnamelen); - if (fullname == NULL) - return __GCONV_NOMEM; - memcpy (__mempcpy (fullname, directory, dirlen), filename, fnamelen); result->__shlib_handle = __gconv_find_shlib (fullname); @@ -191,7 +187,7 @@ find_module (const char *directory, const char *filename, { status = __GCONV_OK; - result->__modname = fullname; + result->__modname = NULL; result->__fct = result->__shlib_handle->fct; result->__init_fct = result->__shlib_handle->init_fct; result->__end_fct = result->__shlib_handle->end_fct; @@ -201,9 +197,6 @@ find_module (const char *directory, const char *filename, status = DL_CALL_FCT (result->__init_fct, (result)); } - if (__builtin_expect (status, __GCONV_OK) != __GCONV_OK) - free (fullname); - return status; } @@ -409,6 +402,18 @@ __gconv_lookup_cache (const char *toset, const char *fromset, } +/* Free memory allocated for the transformation record. */ +void +internal_function +__gconv_release_cache (struct __gconv_step *steps, size_t nsteps) +{ + if (cache != NULL) + /* The only thing we have to deallocate is the record with the + steps. */ + free (steps); +} + + /* Free all resources if necessary. */ static void __attribute__ ((unused)) free_mem (void) |