[net.lang.prolog] CProlog and malloc 'bug' fix

Newton%CIT-Vax@sri-unix.UUCP (06/13/84)

From:  Newton@CIT-Vax (Mike Newton)


Hi --

Those installations that run CProlog and that use the "Caltech
malloc" may not be able to use all of available core.  Example:
We run with 16 Mbyte process space, and if a user types

cprolog -h 4096 -g 4096

CProlog complains for lack of space.  The reason behind this is
that malloc adds 4 bytes of it's own and then rounds up to the
next power of two.


WARNING:   I believe the "Caltech malloc" was the standard one
distributed with 4.2.

One fix -- modify sysbits.c as:

[Line 397]:

    for (i = 0; i < NAreas; i++)
        s += Size[i];
#include <whoami.h>
#ifdef ZAPHOD
  if ((r = pmalloc(s)) == NULL) {  /* we want it ALL! */
#else
  if ((r = malloc(s)) == NULL) {   /* OLD code -- wastes space */
#endif
        perror("Prolog");
        exit(BAD_EXIT);
    }


and also modify the makefile to include pmalloc instead of
malloc.  Pmalloc is:

/*
 * pmalloc.c  (WHOMPED ON: 5/9/84)
 * This is a replacement for the standard
 * malloc for use in CProlog.  -- MONewton
 */

#include <whoami.h>
/* lint,?  whats that? */
#ifdef ZAPHOD
unsigned pmalloc(nbytes)
  register unsigned nbytes;
{
  register unsigned addr;
  return (  (  (addr = sbrk(nbytes)) == -1)  ?  0  :  addr);
}
#endif