summaryrefslogtreecommitdiff
path: root/locale/setlocale.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-06-29 00:17:44 +0000
committerUlrich Drepper <drepper@redhat.com>2001-06-29 00:17:44 +0000
commit90e5b29e1470b218fe4288df7c58593e2f8fd753 (patch)
treef7e4469da4867fa59b5a3ec3732e872891e9f391 /locale/setlocale.c
parent5746ef6f2a918bcd476d4e33017edcec22684928 (diff)
Update.
* manual/users.texi (Setting Groups): Correct initgroups documentation. Add documentation for getgrouplist. 2001-06-28 H.J. Lu <hjl@gnu.org> * locale/findlocale.c (locale_file_list): Renamed to ... (_nl_locale_file_list): This. Make it extern. (free_mem): Move to ... * locale/setlocale.c (free_mem): Here. 2001-06-28 Mark Kettenis <kettenis@gnu.org> 2001-06-20 Isamu Hasegawa <isamu@yamato.ibm.com> 2001-06-26 Isamu Hasegawa <isamu@yamato.ibm.com> * posix/regex.c (count_mbs_length): Use binary search for optimization.
Diffstat (limited to 'locale/setlocale.c')
-rw-r--r--locale/setlocale.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/locale/setlocale.c b/locale/setlocale.c
index c7848b9a5c..c5a8d49069 100644
--- a/locale/setlocale.c
+++ b/locale/setlocale.c
@@ -430,6 +430,7 @@ setlocale (int category, const char *locale)
}
}
+extern struct loaded_l10nfile *_nl_locale_file_list[];
static void __attribute__ ((unused))
free_mem (void)
@@ -440,17 +441,30 @@ free_mem (void)
if (category != LC_ALL)
{
struct locale_data *here = *_nl_current[category];
+ struct loaded_l10nfile *runp = _nl_locale_file_list[category];
/* If this category is already "C" don't do anything. */
- if (here == _nl_C[category])
- continue;
+ if (here != _nl_C[category])
+ {
+ /* We have to be prepared that sometime later me still
+ might need the locale information. */
+ setdata (category, _nl_C[category]);
+ setname (category, _nl_C_name);
- /* We have to be prepared that sometime later me still might
- need the locale information. */
- setdata (category, _nl_C[category]);
- setname (category, _nl_C_name);
+ _nl_unload_locale (here);
+ }
- _nl_unload_locale (here);
+ while (runp != NULL)
+ {
+ struct loaded_l10nfile *curr = runp;
+ struct locale_data *data = (struct locale_data *) runp->data;
+
+ if (data != NULL && data != here && data != _nl_C[category])
+ _nl_unload_locale (data);
+ runp = runp->next;
+ free ((char *) curr->filename);
+ free (curr);
+ }
}
setname (LC_ALL, _nl_C_name);