X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdlib%2Frealloc.c;h=93a2aa418d2280d0853bf7cae2ee474abd8b0081;hb=refs%2Ftags%2FOLD;hp=ac615b8a296820c62938187618ab34cb10228f5d;hpb=34893ecc2200dc7017c36a54cb6c5f4c2378b5ec;p=pdclib diff --git a/functions/stdlib/realloc.c b/functions/stdlib/realloc.c index ac615b8..93a2aa4 100644 --- a/functions/stdlib/realloc.c +++ b/functions/stdlib/realloc.c @@ -1,8 +1,71 @@ -// ---------------------------------------------------------------------------- -// $Id$ -// ---------------------------------------------------------------------------- -// Public Domain C Library - http://pdclib.sourceforge.net -// This code is Public Domain. Use, modify, and redistribute at will. -// ---------------------------------------------------------------------------- +/* ---------------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------------- + * Public Domain C Library - http://pdclib.sourceforge.net + * This code is Public Domain. Use, modify, and redistribute at will. + * --------------------------------------------------------------------------*/ void * realloc( void * ptr, size_t size ) { /* TODO */ }; + +/* PDPC code - assumes size_t of memory chunk at offset -4. +{ + char * newptr; + size_t oldsize; + + if ( ( newptr = malloc(size) ) != NULL ) + { + if ( ptr != NULL ) + { + // reading size information from hidden chunk header + oldsize = * (size_t *) ( (char *) ptr - 4 ); + // correctly handle *down*sizing as well as *up*sizing + memcpy( newptr, ptr, ( oldsize < size ) ? oldsize : size ); + free( ptr ); + } + } + return ( newptr ); +} +*/ + +/* Thomas "Beyond Infinity" Kreitner's code - unchecked, unoptimized +{ + uint_t found = 0; + uint_t length; + chunk_t * new; + chunk_t * chunk; + // searching the block to-be-allocated + chunk = used_mem.start; + while ( ! found && ( chunk->next != NULL ) + { + if ( chunk->address == ptr ) + { + found++; + } + else + { + chunk=chunk->next; + } + } + if ( found ) + { + length = chunk->length; + // allocate new memory area + if ( ( new = (void *) malloc( size ) ) != NULL ) + { + // copy the data + memcpy( ptr, new, length ); + // release the old memory + free( ptr ); + } + else + { + new = NULL; + } + } + else + { + new = NULL; + } + return new; +} +*/