d687664721ecb0c495f5ecca914c50e76762e2b3
[perl.git] / do / msgrcv
1 int
2 do_msgrcv(arglast)
3 int *arglast;
4 {
5 #ifdef HAS_MSG
6     register STR **st = stack->ary_array;
7     register int sp = arglast[0];
8     STR *mstr;
9     char *mbuf;
10     long mtype;
11     int id, msize, flags, ret;
12
13     id = (int)str_gnum(st[++sp]);
14     mstr = st[++sp];
15     msize = (int)str_gnum(st[++sp]);
16     mtype = (long)str_gnum(st[++sp]);
17     flags = (int)str_gnum(st[++sp]);
18     mbuf = str_get(mstr);
19     if (mstr->str_cur < sizeof(long)+msize+1) {
20         STR_GROW(mstr, sizeof(long)+msize+1);
21         mbuf = str_get(mstr);
22     }
23     errno = 0;
24     ret = msgrcv(id, (struct msgbuf *)mbuf, msize, mtype, flags);
25     if (ret >= 0) {
26         mstr->str_cur = sizeof(long)+ret;
27         mstr->str_ptr[sizeof(long)+ret] = '\0';
28     }
29     return ret;
30 #else
31     fatal("msgrcv not implemented");
32 #endif
33 }
34