xref: /haiku/src/system/libroot/posix/sys/xsi_sem.cpp (revision 25a7b01d15612846f332751841da3579db313082)
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