--- xinu/sys/freemem.c 2018/04/24 17:39:04 1.1.1.1 +++ xinu/sys/freemem.c 2018/04/24 17:40:12 1.1.1.2 @@ -12,25 +12,25 @@ SYSCALL freemem(block, size) struct mblock *block; unsigned size; { - PStype ps; struct mblock *p, *q; unsigned top; if (size==0 || (unsigned)block>(unsigned)maxaddr - || ((unsigned)block)<((unsigned)&end)) + || ((unsigned)block)<((unsigned)&end)) return(SYSERR); size = (unsigned)roundew(size); - disable(ps); - for( p=memlist.mnext,q= &memlist ; (char *)p!=NULL && pmnext ) + disable(); + for( p=memlist.mnext,q= &memlist; + p != (struct mblock *) NULL && p < block ; + q=p,p=p->mnext ) ; if ((top=q->mlen+(unsigned)q)>(unsigned)block && q!= &memlist || - (char *)p!=NULL && (size+(unsigned)block) > (unsigned)p ) { - restore(ps); + p!=NULL && (size+(unsigned)block) > (unsigned)p ) { + restore(); return(SYSERR); } if ( q!= &memlist && top == (unsigned)block ) - q->mlen += size; + q->mlen += size; else { block->mlen = size; block->mnext = p; @@ -41,6 +41,6 @@ SYSCALL freemem(block, size) q->mlen += p->mlen; q->mnext = p->mnext; } - restore(ps); + restore(); return(OK); }