diff options
author | Roland McGrath <roland@gnu.org> | 2002-08-31 20:08:18 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-08-31 20:08:18 +0000 |
commit | a0fc81e1710a9cb9b9ccfceaf2afcca2a310cb4d (patch) | |
tree | af29d38e9663142b5602064c03aef7a78ee74a2c /locale/freelocale.c | |
parent | 6f8f03151697ae59158443f271acc941bc0e8e29 (diff) | |
download | glibc-a0fc81e1710a9cb9b9ccfceaf2afcca2a310cb4d.tar.gz glibc-a0fc81e1710a9cb9b9ccfceaf2afcca2a310cb4d.tar.xz glibc-a0fc81e1710a9cb9b9ccfceaf2afcca2a310cb4d.zip |
* locale/newlocale.c (__newlocale): Don't use strdup for names.
Instead, make the single allocation of the structure larger to hold the name strings. * locale/duplocale.c (__duplocale): Don't strdup names individually. Instead, calculate size for a single allocation and copy into it. * locale/freelocale.c (__freelocale): Don't free names individually.
Diffstat (limited to 'locale/freelocale.c')
-rw-r--r-- | locale/freelocale.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/locale/freelocale.c b/locale/freelocale.c index 2ba1432a27..ba0ae85d84 100644 --- a/locale/freelocale.c +++ b/locale/freelocale.c @@ -34,23 +34,18 @@ __freelocale (__locale_t dataset) { int cnt; - /* We modify global data. */ + /* We modify global data (the usage counts). */ __libc_lock_lock (__libc_setlocale_lock); for (cnt = 0; cnt < __LC_LAST; ++cnt) - if (cnt != LC_ALL) - { - if (dataset->__locales[cnt]->usage_count != UNDELETABLE) - /* We can remove the data. */ - _nl_remove_locale (cnt, dataset->__locales[cnt]); - if (dataset->__names[cnt] != _nl_C_name) - free ((char *) dataset->__names[cnt]); - } - - /* Free the locale_t handle itself. */ - free (dataset); + if (cnt != LC_ALL && dataset->__locales[cnt]->usage_count != UNDELETABLE) + /* We can remove the data. */ + _nl_remove_locale (cnt, dataset->__locales[cnt]); /* It's done. */ __libc_lock_unlock (__libc_setlocale_lock); + + /* Free the locale_t handle itself. */ + free (dataset); } weak_alias (__freelocale, freelocale) |