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 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 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 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