summaryrefslogtreecommitdiff
path: root/lib/libc/sem
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/sem')
-rw-r--r--lib/libc/sem/semctl.c24
-rw-r--r--lib/libc/sem/semget.c7
-rw-r--r--lib/libc/sem/semop.c7
3 files changed, 38 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);
+}
diff --git a/lib/libc/sem/semget.c b/lib/libc/sem/semget.c
new file mode 100644
index 00000000..75e1bab9
--- /dev/null
+++ b/lib/libc/sem/semget.c
@@ -0,0 +1,7 @@
+#include <sys/sem.h>
+#include <syscall.h>
+
+int semget(key_t key, int nsems, int semflg)
+{
+ return syscall(semget, key, nsems, semflg);
+}
diff --git a/lib/libc/sem/semop.c b/lib/libc/sem/semop.c
new file mode 100644
index 00000000..82e956dc
--- /dev/null
+++ b/lib/libc/sem/semop.c
@@ -0,0 +1,7 @@
+#include <sys/sem.h>
+#include <syscall.h>
+
+int semop(int semid, struct sembuf *sops, size_t nsops)
+{
+ return syscall(semop, semid, sops, nsops);
+}