147ca7595SAxel Dörfler /*
247ca7595SAxel Dörfler * Copyright 2008, Haiku Inc. All rights reserved.
347ca7595SAxel Dörfler * Distributed under the terms of the MIT License.
447ca7595SAxel Dörfler *
547ca7595SAxel Dörfler * Authors:
647ca7595SAxel Dörfler * Salvatore Benedetto <salvatore.benedetto@gmail.com>
747ca7595SAxel Dörfler */
847ca7595SAxel Dörfler
947ca7595SAxel Dörfler #include <sys/sem.h>
1047ca7595SAxel Dörfler
1147ca7595SAxel Dörfler #include <errno.h>
1247ca7595SAxel Dörfler #include <fcntl.h>
1347ca7595SAxel Dörfler #include <stdarg.h>
1447ca7595SAxel Dörfler #include <stdlib.h>
1547ca7595SAxel Dörfler
1647ca7595SAxel Dörfler #include <OS.h>
1747ca7595SAxel Dörfler
18*ae901935SOliver Tappe #include <errno_private.h>
1951daeb71SSalvatore Benedetto #include <posix/xsi_semaphore_defs.h>
2047ca7595SAxel Dörfler #include <syscall_utils.h>
2147ca7595SAxel Dörfler #include <syscalls.h>
2247ca7595SAxel Dörfler
2347ca7595SAxel Dörfler
2447ca7595SAxel Dörfler int
semget(key_t key,int numSems,int semFlags)2547ca7595SAxel Dörfler semget(key_t key, int numSems, int semFlags)
2647ca7595SAxel Dörfler {
2747ca7595SAxel Dörfler RETURN_AND_SET_ERRNO(_kern_xsi_semget(key, numSems, semFlags));
2847ca7595SAxel Dörfler }
2947ca7595SAxel Dörfler
3047ca7595SAxel Dörfler
3147ca7595SAxel Dörfler int
semctl(int semID,int semNum,int command,...)3247ca7595SAxel Dörfler semctl(int semID, int semNum, int command, ...)
3347ca7595SAxel Dörfler {
3447ca7595SAxel Dörfler union semun arg;
3547ca7595SAxel Dörfler va_list args;
3647ca7595SAxel Dörfler
3747ca7595SAxel Dörfler switch (command) {
3847ca7595SAxel Dörfler case GETVAL:
3947ca7595SAxel Dörfler case GETPID:
4047ca7595SAxel Dörfler case GETNCNT:
4147ca7595SAxel Dörfler case GETZCNT:
4247ca7595SAxel Dörfler case IPC_RMID:
4347ca7595SAxel Dörfler RETURN_AND_SET_ERRNO(_kern_xsi_semctl(semID, semNum, command, 0));
4447ca7595SAxel Dörfler
4547ca7595SAxel Dörfler case SETVAL:
4647ca7595SAxel Dörfler case GETALL:
4747ca7595SAxel Dörfler case SETALL:
4847ca7595SAxel Dörfler case IPC_STAT:
4947ca7595SAxel Dörfler case IPC_SET:
5047ca7595SAxel Dörfler va_start(args, command);
5147ca7595SAxel Dörfler arg = va_arg(args, union semun);
5247ca7595SAxel Dörfler va_end(args);
5347ca7595SAxel Dörfler RETURN_AND_SET_ERRNO(_kern_xsi_semctl(semID, semNum, command,
5447ca7595SAxel Dörfler &arg));
5547ca7595SAxel Dörfler
5647ca7595SAxel Dörfler default:
5747ca7595SAxel Dörfler return EINVAL;
5847ca7595SAxel Dörfler }
5947ca7595SAxel Dörfler }
6047ca7595SAxel Dörfler
6147ca7595SAxel Dörfler
6247ca7595SAxel Dörfler int
semop(int semID,struct sembuf * semOps,size_t numSemOps)6347ca7595SAxel Dörfler semop(int semID, struct sembuf *semOps, size_t numSemOps)
6447ca7595SAxel Dörfler {
6547ca7595SAxel Dörfler RETURN_AND_SET_ERRNO(_kern_xsi_semop(semID, semOps, numSemOps));
6647ca7595SAxel Dörfler }
67