diff options
Diffstat (limited to 'do/semop')
-rw-r--r-- | do/semop | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/do/semop b/do/semop new file mode 100644 index 0000000000..9a4ec11f4a --- /dev/null +++ b/do/semop @@ -0,0 +1,27 @@ +int +do_semop(arglast) +int *arglast; +{ +#ifdef HAS_SEM + register STR **st = stack->ary_array; + register int sp = arglast[0]; + STR *opstr; + char *opbuf; + int id, opsize; + + id = (int)str_gnum(st[++sp]); + opstr = st[++sp]; + opbuf = str_get(opstr); + opsize = opstr->str_cur; + if (opsize < sizeof(struct sembuf) + || (opsize % sizeof(struct sembuf)) != 0) { + errno = EINVAL; + return -1; + } + errno = 0; + return semop(id, (struct sembuf *)opbuf, opsize/sizeof(struct sembuf)); +#else + fatal("semop not implemented"); +#endif +} + |