getstk.c
来自「TCP-IP红宝书源代码」· C语言 代码 · 共 46 行
C
46 行
/* getstk.c - getstk */
#include <conf.h>
#include <kernel.h>
#include <mem.h>
/*------------------------------------------------------------------------
* getstk -- allocate stack memory, returning address of topmost WORD
*------------------------------------------------------------------------
*/
WORD *getstk(nbytes)
unsigned int nbytes;
{
STATWORD ps;
struct mblock *p, *q; /* q follows p along memlist */
struct mblock *fits, *fitsq;
WORD len;
disable(ps);
if (nbytes == 0) {
restore(ps);
return( (WORD *)SYSERR );
}
nbytes = (unsigned int) roundew(nbytes);
fits = (struct mblock *) NULL;
q = &memlist;
for (p = q->mnext ; p !=(struct mblock *) NULL ; q = p,p = p->mnext)
if ( p->mlen >= nbytes) {
fitsq = q;
fits = p;
}
if (fits == (struct mblock *) NULL) {
restore(ps);
return( (WORD *)SYSERR );
}
if (nbytes == (len = fits->mlen) ) {
fitsq->mnext = fits->mnext;
} else {
fits->mlen -= nbytes;
}
fits = (struct mblock *) ((WORD) fits + len - sizeof(WORD));
*((WORD *) fits) = nbytes;
restore(ps);
return( (WORD *) fits);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?