home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d5xx
/
d519
/
oaklisp.lha
/
OakLisp
/
src.lzh
/
mymalloc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-06-15
|
2KB
|
89 lines
/* Copyright (C) 1987 Barak Pearlmutter and Kevin Lang */
#include <stdio.h>
#include "emulator.h"
#ifdef PROTOTYPES
extern void free_space(space *pspace);
extern void alloc_space(space *pspace);
extern char *my_malloc(long i);
#endif
char *my_malloc(i)
long i;
{
#ifdef Mac_LSC
char *p;
ResrvMem(i);
p = mlalloc(i);
#else
#ifdef unix
char *p = malloc((unsigned)i);
#else
char *p = malloc(i);
#endif
#endif
if (p == NULL)
{
(void)fprintf(stderr, "\nUnable to allocate %ld bytes.\n", i);
exit(1);
}
return p;
}
void realloc_space(pspace, pfree)
space *pspace;
ref *pfree;
{
long new_size = pfree - pspace->start;
pspace->size = new_size;
pspace->end = pspace->start + new_size;
/* realloc commented out because it might move the block, even though
it's sure to be shrunk. */
/* realloc((char *)pspace->start, sizeof(ref)*new_size); */
}
void free_space(pspace)
space *pspace;
{
#ifdef UNALIGNED
free((char *)pspace->start - pspace->offset);
if (pspace->offset)
pspace->size += 1;
#else
free((char *)pspace->start);
#endif
pspace->start = pspace->end = NULL;
}
void alloc_space(pspace)
space *pspace;
{
char *p = my_malloc(sizeof(ref) * pspace->size);
#ifdef UNALIGNED
pspace->offset = (long)p & 3L;
p = (char *) ((long)p + pspace->offset);
if (pspace->offset)
pspace->size -= 1;
#endif
/*NOSTRICT*/
pspace->start = (ref *) p;
pspace->end = pspace->start + pspace->size;
}