improved checking

This commit is contained in:
ceriel 1988-05-03 09:03:19 +00:00
parent 7dcfb2b4ad
commit 94bb3d3e04

View file

@ -80,6 +80,7 @@ IMPLEMENTATION MODULE Storage;
pc := ADR(p^.BSTORE) + size; pc := ADR(p^.BSTORE) + size;
pc^ := MAGICC; pc^ := MAGICC;
END; END;
p^.BSIZE := size;
RETURN ADR(p^.BSTORE); RETURN ADR(p^.BSTORE);
END; END;
@ -103,6 +104,7 @@ IMPLEMENTATION MODULE Storage;
pc := ADR(q^.BSTORE) + size; pc := ADR(q^.BSTORE) + size;
pc^ := MAGICC; pc^ := MAGICC;
END; END;
q^.BSIZE := size;
RETURN ADR(q^.BSTORE); RETURN ADR(q^.BSTORE);
END; END;
END; END;
@ -138,6 +140,7 @@ IMPLEMENTATION MODULE Storage;
pc := ADR(p^.BSTORE) + size; pc := ADR(p^.BSTORE) + size;
pc^ := MAGICC; pc^ := MAGICC;
END; END;
p^.BSIZE := size;
RETURN ADR(p^.BSTORE); RETURN ADR(p^.BSTORE);
END; END;
(* Give part of tail of original block. (* Give part of tail of original block.
@ -151,6 +154,7 @@ IMPLEMENTATION MODULE Storage;
pc := ADR(q^.BSTORE) + size; pc := ADR(q^.BSTORE) + size;
pc^ := MAGICC; pc^ := MAGICC;
END; END;
q^.BSIZE := size;
RETURN ADR(q^.BSTORE); RETURN ADR(q^.BSTORE);
END; END;
END; END;
@ -176,6 +180,7 @@ IMPLEMENTATION MODULE Storage;
pc := ADR(p^.BSTORE) + size; pc := ADR(p^.BSTORE) + size;
pc^ := MAGICC; pc^ := MAGICC;
END; END;
p^.BSIZE := size;
RETURN ADR(p^.BSTORE); RETURN ADR(p^.BSTORE);
END MyAllocate; END MyAllocate;
@ -214,22 +219,24 @@ IMPLEMENTATION MODULE Storage;
pc: POINTER TO CHAR; pc: POINTER TO CHAR;
BEGIN BEGIN
IF (a = NIL) THEN IF (a = NIL) THEN
Message("(Warning) NIL pointer deallocated"); Message("(Warning) Deallocate: NIL pointer deallocated");
RETURN; RETURN;
END; END;
p := a - UNIT; p := a - UNIT;
IF (p^.BNEXT # BucketPtr(USED)) THEN 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; a := NIL;
RETURN; RETURN;
END; END;
WITH p^ DO WITH p^ DO
IF BSIZE # ((size + (UNIT - 1)) DIV UNIT) THEN IF BSIZE # size THEN
Message("(Warning) wrong size in deallocate"); Message("(Warning) Deallocate: wrong size or heap corrupted");
ELSIF (BSIZE*UNIT # size) THEN END;
BSIZE := (size + (UNIT - 1)) DIV UNIT;
IF (BSIZE*UNIT # size) THEN
pc := a + size; pc := a + size;
IF pc^ # MAGICC THEN IF pc^ # MAGICC THEN
Message("(Warning) heap corrupted or wrong size in deallocate"); Message("(Warning) Deallocate: heap corrupted");
END; END;
END; END;
IF BSIZE <= NLISTS THEN IF BSIZE <= NLISTS THEN