int do_msgrcv(arglast) int *arglast; { #ifdef HAS_MSG register STR **st = stack->ary_array; register int sp = arglast[0]; STR *mstr; char *mbuf; long mtype; int id, msize, flags, ret; id = (int)str_gnum(st[++sp]); mstr = st[++sp]; msize = (int)str_gnum(st[++sp]); mtype = (long)str_gnum(st[++sp]); flags = (int)str_gnum(st[++sp]); mbuf = str_get(mstr); if (mstr->str_cur < sizeof(long)+msize+1) { STR_GROW(mstr, sizeof(long)+msize+1); mbuf = str_get(mstr); } errno = 0; ret = msgrcv(id, (struct msgbuf *)mbuf, msize, mtype, flags); if (ret >= 0) { mstr->str_cur = sizeof(long)+ret; mstr->str_ptr[sizeof(long)+ret] = '\0'; } return ret; #else fatal("msgrcv not implemented"); #endif }