X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fcommon%2Frealloc.c;h=c2da6ae73d1d2c1ac2c0a16bdf937a9bf381aedb;hb=62cfc60f001e0efb634a4fc569b3723052ae1ffc;hp=32c05f46f8dbac520051accea1e41b6c6077ef4f;hpb=53dd513176425872128ef26031d00952ef7a0628;p=cc65 diff --git a/libsrc/common/realloc.c b/libsrc/common/realloc.c index 32c05f46f..c2da6ae73 100644 --- a/libsrc/common/realloc.c +++ b/libsrc/common/realloc.c @@ -62,7 +62,19 @@ void* realloc (void* block, size_t size) * room left. Try to allocate a new block and copy the data. */ if (newblock = malloc (size)) { - memcpy (newblock, block, oldsize - 2); + + /* Adjust the old size to the user visible portion */ + oldsize -= sizeof (unsigned); + + /* If the new block is larger than the old one, copy the old + * data only + */ + if (size > oldsize) { + size = oldsize; + } + + /* Copy the block data */ + memcpy (newblock, block, size); free (block); } return newblock; @@ -70,9 +82,3 @@ void* realloc (void* block, size_t size) - - - - - -