--- xinu/sys/getstk.c 2018/04/24 17:39:04 1.1.1.1 +++ xinu/sys/getstk.c 2018/04/24 17:40:05 1.1.1.2 @@ -5,40 +5,43 @@ #include /*------------------------------------------------------------------------ - * getstk -- allocate stack memory, returning address of topmost int + * getstk -- allocate stack memory, returning address of topmost WORD *------------------------------------------------------------------------ */ -SYSCALL *getstk(nbytes) +WORD *getstk(nbytes) unsigned int nbytes; { - PStype ps; struct mblock *p, *q; /* q follows p along memlist */ struct mblock *fits, *fitsq; - unsigned len; + WORD address; - disable(ps); + disable(); if (nbytes == 0) { - restore(ps); - return( (int *)SYSERR ); + restore(); + return( (WORD *)SYSERR ); } - nbytes = (unsigned)roundew(nbytes); - fits = (struct mblock *)NULL; + nbytes = (unsigned int) roundew(nbytes); + fits = (struct mblock *) NULL; q = &memlist; - for (p = q->mnext ; (char *)p != NULL ; q = p,p = p->mnext) + for (p = q->mnext ; p !=(struct mblock *) NULL ; q = p,p = p->mnext) if ( p->mlen >= nbytes) { fitsq = q; fits = p; } - if ((char *)fits == NULL) { - restore(ps); - return( (int *)SYSERR ); + if (fits == (struct mblock *) NULL) { + restore(); + return( (WORD *)SYSERR ); } - if (nbytes == (len = fits->mlen) ) { + /* eoneil 2/29/88--moved address calc up above if */ + /* so pointing to last word in area returned */ + address = (WORD) fits + fits->mlen - sizeof(WORD); + if (nbytes == fits->mlen) { fitsq->mnext = fits->mnext; } else { fits->mlen -= nbytes; } - fits = (struct mblock *)((unsigned)fits + len - sizeof(int)); - restore(ps); - return( (int *)fits ); +/* address = (WORD) fits; + address += fits->mlen - sizeof(WORD); */ + restore(); + return( (WORD *) address); }