summary refs log tree commit diff
path: root/locale/freelocale.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-08-31 20:08:18 +0000
committerRoland McGrath <roland@gnu.org>2002-08-31 20:08:18 +0000
commita0fc81e1710a9cb9b9ccfceaf2afcca2a310cb4d (patch)
treeaf29d38e9663142b5602064c03aef7a78ee74a2c /locale/freelocale.c
parent6f8f03151697ae59158443f271acc941bc0e8e29 (diff)
downloadglibc-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.c19
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)