summaryrefslogtreecommitdiff
path: root/lib/libc/sem/semctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/sem/semctl.c')
-rw-r--r--lib/libc/sem/semctl.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/libc/sem/semctl.c b/lib/libc/sem/semctl.c
new file mode 100644
index 00000000..78a1adf8
--- /dev/null
+++ b/lib/libc/sem/semctl.c
@@ -0,0 +1,24 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <syscall.h>
+
+int semctl(int semid, int semnum, int cmd, ...)
+{
+ va_list ap;
+ struct semid_ds *buf = NULL;
+
+ switch (cmd) {
+ case SETVAL:
+ case GETALL:
+ case SETALL:
+ case IPC_SET:
+ case IPC_STAT:
+ va_start(ap, cmd);
+ buf = va_arg(ap, struct semid_ds *);
+ va_end(ap);
+ }
+
+ return syscall(semctl, semid, semnum, cmd, buf);
+}