diff options
author | Roland McGrath <roland@gnu.org> | 2002-08-15 21:58:11 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-08-15 21:58:11 +0000 |
commit | dac68e4c8895630d9f1dbb342dea72493c81d911 (patch) | |
tree | 86cfdd619e4de2f0b1bcf37fcd58556fc62b85c6 /locale/loadarchive.c | |
parent | 2a76f7ef1477c3e33dce2d9d7c3005c660de18a0 (diff) | |
download | glibc-dac68e4c8895630d9f1dbb342dea72493c81d911.tar glibc-dac68e4c8895630d9f1dbb342dea72493c81d911.tar.gz glibc-dac68e4c8895630d9f1dbb342dea72493c81d911.tar.bz2 glibc-dac68e4c8895630d9f1dbb342dea72493c81d911.zip |
2002-08-15 Roland McGrath <roland@redhat.com>
* locale/loadarchive.c (_nl_load_locale_from_archive) Store strdup of
the name as passed, rather than the name in the archive dictionary.
Diffstat (limited to 'locale/loadarchive.c')
-rw-r--r-- | locale/loadarchive.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/locale/loadarchive.c b/locale/loadarchive.c index 845b9b0774..d71ec88e8c 100644 --- a/locale/loadarchive.c +++ b/locale/loadarchive.c @@ -68,7 +68,7 @@ static struct stat64 archive_stat; /* stat of archive when header mapped. */ struct locale_in_archive { struct locale_in_archive *next; - const char *name; + char *name; struct locale_data *data[__LC_LAST]; }; static struct locale_in_archive *archloaded; @@ -428,7 +428,13 @@ _nl_load_locale_from_archive (int category, const char **namep) if (__builtin_expect (lia == NULL, 0)) return NULL; - lia->name = headmap.ptr + namehashtab[idx].name_offset; + lia->name = strdup (*namep); + if (__builtin_expect (lia->name == NULL, 0)) + { + free (lia); + return NULL; + } + lia->next = archloaded; archloaded = lia; @@ -464,6 +470,7 @@ _nl_archive_subfreeres (void) struct locale_in_archive *dead = lia; lia = lia->next; + free (dead->name); for (category = 0; category < __LC_LAST; ++category) if (category != LC_ALL) /* _nl_unload_locale just does this free for the archive case. */ |