VSF Documented
sem.h
Go to the documentation of this file.
1#ifndef __VSF_LINUX_SYS_SEM_H__
2#define __VSF_LINUX_SYS_SEM_H__
3
5
6#if VSF_LINUX_CFG_RELATIVE_PATH == ENABLED
7# include "./types.h"
8# include "./ipc.h"
9#else
10# include <sys/types.h>
11# include <sys/ipc.h>
12#endif
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18// semop flags
19#define SEM_UNDO (1 << 0)
20
21// semctl cmd
22#define GETPID (F_USER + 0)
23#define GETVAL (F_USER + 1)
24#define GETALL (F_USER + 2)
25#define GETNCNT (F_USER + 3)
26#define GETZCNT (F_USER + 4)
27#define SETVAL (F_USER + 5)
28#define SETALL (F_USER + 6)
29
30struct semid_ds {
32};
33
34struct sembuf {
35 unsigned short sem_num;
36 short sem_op;
37 short sem_flg;
38};
39
40#if VSF_LINUX_CFG_WRAPPER == ENABLED
41#define semget VSF_LINUX_WRAPPER(semget)
42#define semctl VSF_LINUX_WRAPPER(semctl)
43#define semop VSF_LINUX_WRAPPER(semop)
44#define semtimedop VSF_LINUX_WRAPPER(semtimedop)
45#endif
46
47#if VSF_LINUX_APPLET_USE_SYS_SEM == ENABLED
50
57# ifndef __VSF_APPLET__
59# endif
60#endif
61
62#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_SYS_SEM_LIB__))\
63 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_SYS_SEM == ENABLED
64
65#ifndef VSF_LINUX_APPLET_SYS_SEM_VPLT
66# if VSF_LINUX_USE_APPLET == ENABLED
67# define VSF_LINUX_APPLET_SYS_SEM_VPLT \
68 ((vsf_linux_sys_sem_vplt_t *)(VSF_LINUX_APPLET_VPLT->sys_sem_vplt))
69# else
70# define VSF_LINUX_APPLET_SYS_SEM_VPLT \
71 ((vsf_linux_sys_sem_vplt_t *)vsf_vplt((void *)0))
72# endif
73#endif
74
75#define VSF_LINUX_APPLET_SYS_SEM_ENTRY(__NAME) \
76 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_SYS_SEM_VPLT, __NAME)
77#define VSF_LINUX_APPLET_SYS_SEM_IMP(...) \
78 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_SYS_SEM_VPLT, __VA_ARGS__)
79
80VSF_LINUX_APPLET_SYS_SEM_IMP(__semctl_va, int, int semid, int semnum, int cmd, va_list ap) {
82 return VSF_LINUX_APPLET_SYS_SEM_ENTRY(__semctl_va)(semid, semnum, cmd, ap);
83}
84VSF_LINUX_APPLET_SYS_SEM_IMP(semget, int, key_t key, int nsems, int semflg) {
86 return VSF_LINUX_APPLET_SYS_SEM_ENTRY(semget)(key, nsems, semflg);
87}
88VSF_LINUX_APPLET_SYS_SEM_IMP(semop, int, int semid, struct sembuf *sops, size_t nsops) {
90 return VSF_LINUX_APPLET_SYS_SEM_ENTRY(semop)(semid, sops, nsops);
91}
92VSF_LINUX_APPLET_SYS_SEM_IMP(semtimedop, int, int semid, struct sembuf *sops, size_t nsops, const struct timespec *timeout) {
94 return VSF_LINUX_APPLET_SYS_SEM_ENTRY(semtimedop)(semid, sops, nsops, timeout);
95}
96
97VSF_APPLET_VPLT_FUNC_DECORATOR(semctl) int semctl(int semid, int semnum, int cmd, ...) {
98 int result;
99 va_list ap;
100 va_start(ap, cmd);
101 result = __semctl_va(semid, semnum, cmd, ap);
102 va_end(ap);
103 return result;
104}
105
106#else // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_SYS_SEM
107
108int semctl(int semid, int semnum, int cmd, ...);
109int semget(key_t key, int nsems, int semflg);
110int semop(int semid, struct sembuf *sops, size_t nsops);
111int semtimedop(int semid, struct sembuf *sops, size_t nsops,
112 const struct timespec *timeout);
113
114#endif // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_SYS_SEM
115
116#ifdef __cplusplus
117}
118#endif
119
120#endif // __VSF_LINUX_SEM_H__
__le16 timeout
Definition ieee80211.h:94
int key_t
Definition types.h:84
#define semget
Definition sem.h:41
#define semop
Definition sem.h:43
#define semtimedop
Definition sem.h:44
#define semctl
Definition sem.h:42
__VSF_VPLT_DECORATOR__ vsf_linux_sys_sem_vplt_t vsf_linux_sys_sem_vplt
Definition vsf_linux.c:4855
Definition ipc.h:29
Definition sem.h:34
short sem_flg
Definition sem.h:37
unsigned short sem_num
Definition sem.h:35
short sem_op
Definition sem.h:36
Definition sem.h:30
struct ipc_perm sem_perm
Definition sem.h:31
Definition time.h:66
Definition sem.h:48
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(semtimedop)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(__semctl_va)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(semget)
vsf_vplt_info_t info
Definition sem.h:49
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(semctl)
Definition vsf_cfg.h:95
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93
#define VSF_APPLET_VPLT_ENTRY_FUNC_TRACE()
Definition vsf_cfg.h:165
int __semctl_va(int semid, int semnum, int cmd, va_list ap)
Definition vsf_linux.c:3103
#define VSF_APPLET_VPLT_FUNC_DECORATOR(__NAME)
Definition vsf_linux_applet_lib.c:1