pc := ADR(p^.BSTORE) + size;
pc^ := MAGICC;
END;
+ p^.BSIZE := size;
RETURN ADR(p^.BSTORE);
END;
pc := ADR(q^.BSTORE) + size;
pc^ := MAGICC;
END;
+ q^.BSIZE := size;
RETURN ADR(q^.BSTORE);
END;
END;
pc := ADR(p^.BSTORE) + size;
pc^ := MAGICC;
END;
+ p^.BSIZE := size;
RETURN ADR(p^.BSTORE);
END;
(* Give part of tail of original block.
pc := ADR(q^.BSTORE) + size;
pc^ := MAGICC;
END;
+ q^.BSIZE := size;
RETURN ADR(q^.BSTORE);
END;
END;
pc := ADR(p^.BSTORE) + size;
pc^ := MAGICC;
END;
+ p^.BSIZE := size;
RETURN ADR(p^.BSTORE);
END MyAllocate;
pc: POINTER TO CHAR;
BEGIN
IF (a = NIL) THEN
- Message("(Warning) NIL pointer deallocated");
+ Message("(Warning) Deallocate: NIL pointer deallocated");
RETURN;
END;
p := a - UNIT;
IF (p^.BNEXT # BucketPtr(USED)) THEN
- Message("(Warning) area already deallocated or heap corrupted");
+ Message("(Warning) Deallocate: area already deallocated or heap corrupted");
a := NIL;
RETURN;
END;
WITH p^ DO
- IF BSIZE # ((size + (UNIT - 1)) DIV UNIT) THEN
- Message("(Warning) wrong size in deallocate");
- ELSIF (BSIZE*UNIT # size) THEN
+ IF BSIZE # size THEN
+ Message("(Warning) Deallocate: wrong size or heap corrupted");
+ END;
+ BSIZE := (size + (UNIT - 1)) DIV UNIT;
+ IF (BSIZE*UNIT # size) THEN
pc := a + size;
IF pc^ # MAGICC THEN
- Message("(Warning) heap corrupted or wrong size in deallocate");
+ Message("(Warning) Deallocate: heap corrupted");
END;
END;
IF BSIZE <= NLISTS THEN