--- xinu/sys/getmem.c 2018/04/24 17:39:03 1.1 +++ xinu/sys/getmem.c 2018/04/24 17:39:33 1.1.1.2 @@ -5,34 +5,36 @@ #include /*------------------------------------------------------------------------ - * getmem -- allocate heap storage, returning lowest integer address + * getmem -- allocate heap storage, returning lowest WORD address *------------------------------------------------------------------------ */ -SYSCALL *getmem(nbytes) +WORD *getmem(nbytes) unsigned nbytes; { - PStype ps; struct mblock *p, *q, *leftover; - disable(ps); - if (nbytes<=0 || (char *)memlist.mnext==NULL) { - restore(ps); - return( (int *)SYSERR); + disable(); + if (nbytes==0 || memlist.mnext== (struct mblock *) NULL) { + restore(); + return( (WORD *)SYSERR); } - nbytes = (unsigned) roundew(nbytes); - for (q= &memlist,p=memlist.mnext ; (char *)p!=NULL ; q=p,p=p->mnext) + nbytes = (unsigned int) roundew(nbytes); + for (q= &memlist,p=memlist.mnext ; + p != (struct mblock *) NULL ; + q=p,p=p->mnext) if ( p->mlen == nbytes) { q->mnext = p->mnext; - restore(ps); - return( (int *)p ); + restore(); + return( (WORD *)p ); } else if ( p->mlen > nbytes ) { leftover = (struct mblock *)( (unsigned)p + nbytes ); q->mnext = leftover; - leftover->mnext = p->mnext; +/* eoneil 2/29/88--exchanged next two statements so getmem(4) works */ leftover->mlen = p->mlen - nbytes; - restore(ps); - return( (int *)p ); + leftover->mnext = p->mnext; + restore(); + return( (WORD *)p ); } - restore(ps); - return( (int *)SYSERR ); + restore(); + return( (WORD *)SYSERR ); }