mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-03 08:11:08 +00:00
2002-08-20 Jakub Jelinek <jakub@redhat.com>
* locale/loadarchive.c (_nl_load_locale_from_archive): Handle partially overlapping mappings. Remove unneeded (char *) casts. Never allow duplication of ranges in mapped areas.
This commit is contained in:
parent
69681bdee0
commit
b5560a4483
@ -327,7 +327,8 @@ _nl_load_locale_from_archive (int category, const char **namep)
|
||||
|
||||
/* Determine whether the appropriate page is already mapped. */
|
||||
while (mapped != NULL
|
||||
&& mapped->from + mapped->len <= ranges[cnt].from)
|
||||
&& (mapped->from + mapped->len
|
||||
<= ranges[cnt].from + ranges[cnt].len))
|
||||
{
|
||||
last = mapped;
|
||||
mapped = mapped->next;
|
||||
@ -336,8 +337,8 @@ _nl_load_locale_from_archive (int category, const char **namep)
|
||||
/* Do we have a match? */
|
||||
if (mapped != NULL
|
||||
&& mapped->from <= ranges[cnt].from
|
||||
&& ((char *) ranges[cnt].from + ranges[cnt].len
|
||||
<= (char *) mapped->from + mapped->len))
|
||||
&& (ranges[cnt].from + ranges[cnt].len
|
||||
<= mapped->from + mapped->len))
|
||||
{
|
||||
/* Yep, already loaded. */
|
||||
results[ranges[cnt].category].addr = ((char *) mapped->ptr
|
||||
@ -356,6 +357,9 @@ _nl_load_locale_from_archive (int category, const char **namep)
|
||||
upper = cnt;
|
||||
do
|
||||
{
|
||||
/* If a range is already mmaped in, stop. */
|
||||
if (mapped != NULL && ranges[upper].from >= mapped->from)
|
||||
break;
|
||||
to = ((ranges[upper].from + ranges[upper].len + ps - 1)
|
||||
& ~(ps - 1));
|
||||
++upper;
|
||||
|
Loading…
Reference in New Issue
Block a user