xref: /haiku/src/system/libroot/posix/sys/xsi_sem.cpp (revision 51daeb7147ec5e457bca3a3acb7643ec92318d83)
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*51daeb71SSalvatore Benedetto #include <posix/xsi_semaphore_defs.h>
1947ca7595SAxel Dörfler #include <syscall_utils.h>
2047ca7595SAxel Dörfler #include <syscalls.h>
2147ca7595SAxel Dörfler 
2247ca7595SAxel Dörfler 
2347ca7595SAxel Dörfler int
2447ca7595SAxel Dörfler semget(key_t key, int numSems, int semFlags)
2547ca7595SAxel Dörfler {
2647ca7595SAxel Dörfler 	RETURN_AND_SET_ERRNO(_kern_xsi_semget(key, numSems, semFlags));
2747ca7595SAxel Dörfler }
2847ca7595SAxel Dörfler 
2947ca7595SAxel Dörfler 
3047ca7595SAxel Dörfler int
3147ca7595SAxel Dörfler semctl(int semID, int semNum, int command, ...)
3247ca7595SAxel Dörfler {
3347ca7595SAxel Dörfler 	union semun arg;
3447ca7595SAxel Dörfler 	va_list args;
3547ca7595SAxel Dörfler 
3647ca7595SAxel Dörfler 	switch (command) {
3747ca7595SAxel Dörfler 		case GETVAL:
3847ca7595SAxel Dörfler 		case GETPID:
3947ca7595SAxel Dörfler 		case GETNCNT:
4047ca7595SAxel Dörfler 		case GETZCNT:
4147ca7595SAxel Dörfler 		case IPC_RMID:
4247ca7595SAxel Dörfler 			RETURN_AND_SET_ERRNO(_kern_xsi_semctl(semID, semNum, command, 0));
4347ca7595SAxel Dörfler 
4447ca7595SAxel Dörfler 		case SETVAL:
4547ca7595SAxel Dörfler 		case GETALL:
4647ca7595SAxel Dörfler 		case SETALL:
4747ca7595SAxel Dörfler 		case IPC_STAT:
4847ca7595SAxel Dörfler 		case IPC_SET:
4947ca7595SAxel Dörfler 			va_start(args, command);
5047ca7595SAxel Dörfler 			arg = va_arg(args, union semun);
5147ca7595SAxel Dörfler 			va_end(args);
5247ca7595SAxel Dörfler 			RETURN_AND_SET_ERRNO(_kern_xsi_semctl(semID, semNum, command,
5347ca7595SAxel Dörfler 				&arg));
5447ca7595SAxel Dörfler 
5547ca7595SAxel Dörfler 		default:
5647ca7595SAxel Dörfler 			return EINVAL;
5747ca7595SAxel Dörfler 	}
5847ca7595SAxel Dörfler }
5947ca7595SAxel Dörfler 
6047ca7595SAxel Dörfler 
6147ca7595SAxel Dörfler int
6247ca7595SAxel Dörfler semop(int semID, struct sembuf *semOps, size_t numSemOps)
6347ca7595SAxel Dörfler {
6447ca7595SAxel Dörfler 	RETURN_AND_SET_ERRNO(_kern_xsi_semop(semID, semOps, numSemOps));
6547ca7595SAxel Dörfler }
66