diff --git a/modules/src/malloc/.distr b/modules/src/malloc/.distr index c0b922e2f..048c21b65 100644 --- a/modules/src/malloc/.distr +++ b/modules/src/malloc/.distr @@ -12,3 +12,4 @@ mal.c param.h phys.c phys.h +size_type.h diff --git a/modules/src/malloc/Makefile b/modules/src/malloc/Makefile index 5884e37ae..0a4ca6ba5 100644 --- a/modules/src/malloc/Makefile +++ b/modules/src/malloc/Makefile @@ -5,7 +5,7 @@ CFLAGS = -O -I$(EMHOME)/modules/h $(COPT) SUF = o RCC = cc #$ must produce a runnable object -MALLOCSRC = READ_ME size_type.h param.h impl.h check.h log.h phys.h \ +MALLOCSRC = READ_ME size_type.h gensize_type.h param.h impl.h check.h log.h phys.h \ mal.c log.c phys.c check.c .SUFFIXES: .$(SUF) @@ -35,10 +35,10 @@ opr: make pr | opr clean: - rm -f *.$(SUF) clashes malloc1.c size_type.h getsize malloc.c + rm -f *.$(SUF) clashes malloc1.c gensize_type.h getsize malloc.c -size_type.h: getsize - getsize > size_type.h +gensize_type.h: getsize + getsize > gensize_type.h getsize: getsize.c $(RCC) -o getsize getsize.c diff --git a/modules/src/malloc/getsize.c b/modules/src/malloc/getsize.c index de2b133a1..feb6ef57c 100644 --- a/modules/src/malloc/getsize.c +++ b/modules/src/malloc/getsize.c @@ -11,14 +11,17 @@ main() { + puts("#ifndef size_type"); if (sizeof(unsigned int) == sizeof(char *)) { - puts("typedef unsigned int size_type;"); - exit(0); + puts("#define size_type unsigned int"); } - if (sizeof(long) == sizeof(char *)) { - puts("typedef long size_type;"); - exit(0); + else if (sizeof(long) == sizeof(char *)) { + puts("#define size_type long"); } - fputs("funny pointer size\n", stderr); - exit(1); + else { + fputs("funny pointer size\n", stderr); + exit(1); + } + puts("#endif"); + exit(0); } diff --git a/modules/src/malloc/size_type.h b/modules/src/malloc/size_type.h new file mode 100644 index 000000000..996b6fc55 --- /dev/null +++ b/modules/src/malloc/size_type.h @@ -0,0 +1,15 @@ +/* $Header$ */ +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +/* This file defines size_type if _EM_WSIZE and _EM_PSIZE are defined. +*/ + +#if defined(_EM_WSIZE) && defined(_EM_PSIZE) +#if _EM_WSIZE == _EM_PSIZE +#define size_type unsigned int +#else +#define size_type long +#endif +#endif