/**
***  MemPools:	malloc() replacement using standard Amiga pool functions.
***  Copyright	(C)  1994    Jochen Wiedmann
***
***  This program is free software; you can redistribute it and/or modify
***  it under the terms of the GNU General Public License as published by
***  the Free Software Foundation; either version 2 of the License, or
***  (at your option) any later version.
***
***  This program is distributed in the hope that it will be useful,
***  but WITHOUT ANY WARRANTY; without even the implied warranty of
***  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
***  GNU General Public License for more details.
***
***  You should have received a copy of the GNU General Public License
***  along with this program; if not, write to the Free Software
***  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
***
***
***  This file contains the realloc() replacement.
***
***
***  Computer:	Amiga 1200
***
***  Compilers: Dice 3.01
***		SAS/C 6.3
***		gcc 2.6.1
***
***
***  Author:	Jochen Wiedmann
***		Am Eisteich 9
***	  72555 Metzingen
***		Germany
***
***		Phone: (0049) 7123 14881
***		Internet: jochen.wiedmann@uni-tuebingen.de
**/




/*
    Include files and compiler specific stuff
*/
#include <stdlib.h>
#include <string.h>



#define soldptr ((size_t *) oldptr)
#define sptr ((size_t *) ptr)
void *realloc(void *oldptr, size_t size)

{ void *ptr;
  size_t oldsize;

  if (oldptr)
  { if (!size)
    { free(oldptr);
      return(NULL);
    }
    oldsize = soldptr[-1];
    if (oldsize  >=  size)
    { return(oldptr);
    }
  }
  if ((ptr = malloc(size))  &&  oldptr)
  { memcpy(ptr, oldptr, oldsize);
    free(oldptr);
  }
  return(ptr);
}
