about summary refs log tree commit diff
path: root/locale/setlocale.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-08-10 23:55:20 +0000
committerRoland McGrath <roland@gnu.org>2002-08-10 23:55:20 +0000
commita89a3dab8050c1dbf0c125d44d45ff67b43703cb (patch)
tree297330f1534ba93dd23c4eaab2b0b37b3e859099 /locale/setlocale.c
parent0752d00848022cdb532a4b548997811e34530af3 (diff)
downloadglibc-a89a3dab8050c1dbf0c125d44d45ff67b43703cb.tar.gz
glibc-a89a3dab8050c1dbf0c125d44d45ff67b43703cb.tar.xz
glibc-a89a3dab8050c1dbf0c125d44d45ff67b43703cb.zip
2002-08-10 Roland McGrath <roland@redhat.com>
	* locale/loadarchive.c (_nl_archive_subfreeres): New function.
	* locale/localeinfo.h: Declare it.
	* locale/setlocale.c (free_mem): Don't call _nl_unload_locale on the
	current locale if it's not in the file list.
	Call _nl_archive_subfreeres.
	* include/wctype.h (iswalpha, iswdigit, iswlower, iswspace, iswxdigit,
	towlower, towupper): Add prototypes here too.  Add libc_hidden_proto.
	* wctype/wcfuncs.c (iswalpha, iswdigit, iswlower, iswspace, iswxdigit,
	towlower, towupper): Add libc_hidden_weak.
Diffstat (limited to 'locale/setlocale.c')
-rw-r--r--locale/setlocale.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/locale/setlocale.c b/locale/setlocale.c
index 46af339eae..3c80379cf9 100644
--- a/locale/setlocale.c
+++ b/locale/setlocale.c
@@ -458,12 +458,10 @@ free_mem (void)
 	/* If this category is already "C" don't do anything.  */
 	if (here != _nl_C[category])
 	  {
-	    /* We have to be prepared that sometime later me still
+	    /* We have to be prepared that sometime later we still
 	       might need the locale information.  */
 	    setdata (category, _nl_C[category]);
 	    setname (category, _nl_C_name);
-
-	    _nl_unload_locale (here);
 	  }
 
 	while (runp != NULL)
@@ -471,7 +469,7 @@ free_mem (void)
 	    struct loaded_l10nfile *curr = runp;
 	    struct locale_data *data = (struct locale_data *) runp->data;
 
-	    if (data != NULL && data != here && data != _nl_C[category])
+	    if (data != NULL && data != _nl_C[category])
 	      _nl_unload_locale (data);
 	    runp = runp->next;
 	    free ((char *) curr->filename);
@@ -480,5 +478,10 @@ free_mem (void)
       }
 
   setname (LC_ALL, _nl_C_name);
+
+  /* This frees the data structures associated with the locale archive.
+     The locales from the archive are not in the file list, so we have
+     not called _nl_unload_locale on them above.  */
+  _nl_archive_subfreeres ();
 }
 text_set_element (__libc_subfreeres, free_mem);