if (result == tmpbuf)
{
size_t memsize = length + extra_alloc;
- char *memory;
- memory = (char *) malloc (memsize > 0 ? memsize : 1);
- if (memory != NULL)
+ if (*resultp != NULL && *lengthp >= memsize)
{
- memcpy (memory, tmpbuf, length);
- result = memory;
+ result = *resultp;
+ memcpy (result, tmpbuf, length);
}
else
{
- errno = ENOMEM;
- return -1;
+ char *memory;
+
+ memory = (char *) malloc (memsize > 0 ? memsize : 1);
+ if (memory != NULL)
+ {
+ memcpy (memory, tmpbuf, length);
+ result = memory;
+ }
+ else
+ {
+ errno = ENOMEM;
+ return -1;
+ }
}
}
else if (result != *resultp && length + extra_alloc < allocated)