mirror of
https://github.com/mirror/make.git
synced 2025-01-15 23:00:37 +08:00
* strcache.c (add_string): [SV 47071] Handle huge initial string.
If the very first string added to the string cache is more than half the maximum size, we failed when moving the only strcache buffer to the full list.
This commit is contained in:
parent
89e18c12eb
commit
8530d77c68
@ -110,13 +110,13 @@ add_string (const char *str, unsigned int len)
|
||||
for (; *spp != NULL; spp = &(*spp)->next)
|
||||
if ((*spp)->bytesfree > sz)
|
||||
break;
|
||||
sp = *spp;
|
||||
|
||||
/* If nothing is big enough, make a new cache at the front. */
|
||||
sp = *spp;
|
||||
if (sp == NULL)
|
||||
{
|
||||
sp = new_cache (&strcache, BUFSIZE);
|
||||
spp = &sp;
|
||||
spp = &strcache;
|
||||
}
|
||||
|
||||
/* Add the string to this cache. */
|
||||
@ -124,9 +124,9 @@ add_string (const char *str, unsigned int len)
|
||||
|
||||
/* If the amount free in this cache is less than the average string size,
|
||||
consider it full and move it to the full list. */
|
||||
if (sp->bytesfree < (total_size / total_strings) + 1)
|
||||
if (total_strings > 20 && sp->bytesfree < (total_size / total_strings) + 1)
|
||||
{
|
||||
*spp = (*spp)->next;
|
||||
*spp = sp->next;
|
||||
sp->next = fullcache;
|
||||
fullcache = sp;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user