1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00

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.
This commit is contained in:
Roland McGrath
2002-08-10 23:55:20 +00:00
parent 0752d00848
commit a89a3dab80
4 changed files with 62 additions and 12 deletions

View File

@@ -445,3 +445,44 @@ _nl_load_locale_from_archive (int category, const char **namep)
*namep = lia->name;
return lia->data[category];
}
void
_nl_archive_subfreeres (void)
{
struct locale_in_archive *lia;
struct archmapped *am;
/* Toss out our cached locales. */
lia = archloaded;
while (lia != NULL)
{
int category;
struct locale_in_archive *dead = lia;
lia = lia->next;
for (category = 0; category < __LC_LAST; ++category)
if (category != LC_ALL)
/* _nl_unload_locale just does this free for the archive case. */
free (dead->data[category]);
free (dead);
}
archloaded = NULL;
if (archmapped != NULL)
{
/* Now toss all the mapping windows, which we know nothing is using any
more because we just tossed all the locales that point into them. */
assert (archmapped == &headmap);
archmapped = NULL;
(void) munmap (headmap.ptr, headmap.len);
am = headmap.next;
while (am != NULL)
{
struct archmapped *dead = am;
am = am->next;
(void) munmap (dead->ptr, dead->len);
free (dead);
}
}
}