diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-12-17 20:59:54 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-12-17 20:59:54 +0000 |
commit | 8c4796197c60fc8aa380d8995f0d744faf4d8c4a (patch) | |
tree | 8747f959e3e829d8bb70971f7e7017f73696b828 /iconv/gconv_db.c | |
parent | c5b0e13e208bbc4722be3f45283e75d1333b4957 (diff) | |
download | glibc-8c4796197c60fc8aa380d8995f0d744faf4d8c4a.tar glibc-8c4796197c60fc8aa380d8995f0d744faf4d8c4a.tar.gz glibc-8c4796197c60fc8aa380d8995f0d744faf4d8c4a.tar.bz2 glibc-8c4796197c60fc8aa380d8995f0d744faf4d8c4a.zip |
Update.
* iconv/gconv_int.h (gconv_module): Add new element from_regex_mem.
* iconv/gconv_conf.c (module_compare): Make s1 and s2 const.
(detect_conflict): New function.
(add_alias): Call detect_conflict to see whether there is already
a module for the new name.
(add_module): Make sure there is no alias for the new name.
(read_conf_file): Call add_alias with new argument.
(__gconv_read_conf): Don't destroy module tree immediately after
walking it. We need it to test the internal conversions for
conflicts.
* iconv/gconv_db.c (find_derivation): Don't allocate memory for
regular expression. There is now room in the module descriptor.
(free_mem): Don't free memory for regular expression.
Diffstat (limited to 'iconv/gconv_db.c')
-rw-r--r-- | iconv/gconv_db.c | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c index f5a67ffbab..11914547c7 100644 --- a/iconv/gconv_db.c +++ b/iconv/gconv_db.c @@ -348,17 +348,14 @@ find_derivation (const char *toset, const char *toset_expand, /* First compile the regex if not already done. */ if (__gconv_modules_db[cnt]->from_regex == NULL) { - regex_t *newp = (regex_t *) malloc (sizeof (regex_t)); - - if (__regcomp (newp, __gconv_modules_db[cnt]->from_pattern, + if (__regcomp (&__gconv_modules_db[cnt]->from_regex_mem, + __gconv_modules_db[cnt]->from_pattern, REG_EXTENDED | REG_ICASE) != 0) - { - /* Something is wrong. Remember this. */ - free (newp); - __gconv_modules_db[cnt]->from_regex = (regex_t *) -1L; - } + /* Something is wrong. Remember this. */ + __gconv_modules_db[cnt]->from_regex = (regex_t *) -1L; else - __gconv_modules_db[cnt]->from_regex = newp; + __gconv_modules_db[cnt]->from_regex + = &__gconv_modules_db[cnt]->from_regex_mem; } if (__gconv_modules_db[cnt]->from_regex != (regex_t *) -1L) @@ -627,15 +624,10 @@ free_mem (void) __tdestroy (__gconv_alias_db, free); for (cnt = 0; cnt < __gconv_nmodules; ++cnt) - { - if (__gconv_modules_db[cnt]->from_regex != NULL) - __regfree ((regex_t *) __gconv_modules_db[cnt]->from_regex); - - /* Modules which names do not start with a slash are builtin - transformations and the memory is not allocated dynamically. */ - if (__gconv_modules_db[cnt]->module_name[0] == '/') - free (__gconv_modules_db[cnt]); - } + /* Modules which names do not start with a slash are builtin + transformations and the memory is not allocated dynamically. */ + if (__gconv_modules_db[cnt]->module_name[0] == '/') + free (__gconv_modules_db[cnt]); if (known_derivations != NULL) __tdestroy (known_derivations, free_derivation); |