Compatibility fix for QB4.0(+?)

git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/branches/UNSTABLE@1259 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Blair Campbell 2006-08-20 06:54:39 +00:00
parent 0b892e8479
commit 3b6ba941b9

View File

@ -38,8 +38,10 @@ static BYTE *memmgrRcsId =
#define nxtMCB(mcb) nxtMCBsize((mcb), (mcb)->m_size)
#define mcbFree(mcb) ((mcb)->m_psp == FREE_PSP)
#define mcbValid(mcb) \
((mcb)->m_type == MCB_NORMAL || (mcb)->m_type == MCB_LAST)
#define mcbValid(mcb) ( ((mcb)->m_size != 0xffff) && \
((mcb)->m_type == MCB_NORMAL || (mcb)->m_type == MCB_LAST) )
#define mcbFreeable(mcb) \
((mcb)->m_type == MCB_NORMAL || (mcb)->m_type == MCB_LAST)
#define para2far(seg) (mcb FAR *)MK_FP((seg) , 0)
@ -67,6 +69,11 @@ STATIC COUNT joinMCBs(seg para)
p->m_type = q->m_type; /* possibly the next MCB is the last one */
p->m_size += q->m_size + 1; /* one for q's MCB itself */
q->m_type = 'K'; /* Invalidate the magic number */
#if 0 /* this spoils QB4's habit to double-free: */
q->m_type = 'K'; /* Invalidate the magic number (whole MCB) */
#else
q->m_size = 0xffff; /* mark the now unlinked MCB as "fake" */
#endif
}
return SUCCESS;
@ -289,7 +296,7 @@ COUNT DosMemFree(UWORD para)
p = para2far(para);
/* check for corruption */
if (!mcbValid(p))
if (!mcbFreeable(p)) /* does not have to be valid, freeable is enough */
return DE_INVLDMCB;
/* Mark the mcb as free so that we can later */