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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user