summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/include/cygwin/sem.h
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/include/cygwin/sem.h')
-rw-r--r--winsup/cygwin/include/cygwin/sem.h75
1 files changed, 54 insertions, 21 deletions
diff --git a/winsup/cygwin/include/cygwin/sem.h b/winsup/cygwin/include/cygwin/sem.h
index a3ece9f8a..af7a42f36 100644
--- a/winsup/cygwin/include/cygwin/sem.h
+++ b/winsup/cygwin/include/cygwin/sem.h
@@ -9,8 +9,8 @@ This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
-#ifndef _SYS_SEM_H
-#define _SYS_SEM_H
+#ifndef _CYGWIN_SEM_H
+#define _CYGWIN_SEM_H
#include <cygwin/ipc.h>
@@ -21,7 +21,7 @@ extern "C"
/* Semaphore operation flags:
*/
-#define SEM_UNDO /* Set up adjust on exit entry. */
+#define SEM_UNDO 010000 /* Set up adjust on exit entry. */
/* Command definitions for the semctl () function:
*/
@@ -33,8 +33,10 @@ extern "C"
#define SETVAL 0x3005 /* Set semval. */
#define SETALL 0x3006 /* Set all cases of semval. */
+#ifdef _KERNEL
#define SEM_STAT 0x3010 /* For ipcs(8). */
#define SEM_INFO 0x3011 /* For ipcs(8). */
+#endif /* _KERNEL */
struct semid_ds
{
@@ -42,7 +44,12 @@ struct semid_ds
unsigned short sem_nsems; /* Number of semaphores in set. */
timestruc_t sem_otim; /* Last semop () time. */
timestruc_t sem_ctim; /* Last time changed by semctl (). */
+#ifdef _KERNEL
+ struct sem *sem_base; /* pointer to first semaphore in set */
+ long sem_spare4[1];
+#else
long sem_spare4[2];
+#endif /* _KERNEL */
};
#define sem_otime sem_otim.tv_sec
@@ -55,35 +62,61 @@ struct sembuf
short sem_flg; /* Operation flags. */
};
+#ifdef _KERNEL
/* Buffer type for semctl (IPC_INFO, ...) as used by ipcs(8).
*/
struct seminfo
{
- unsigned long semmni; /* Maximum number of unique semaphore
- sets, system wide. */
- unsigned long semmns; /* Maximum number of semaphores,
- system wide. */
- unsigned long semmsl; /* Maximum number of semaphores per
- semaphore set. */
- unsigned long semopm; /* Maximum number of operations per
- semop call. */
- unsigned long semmnu; /* Maximum number of undo structures,
- system wide. */
- unsigned long semume; /* Maximum number of undo entries per
- undo structure. */
- unsigned long semvmx; /* Maximum semaphore value. */
- unsigned long semaem; /* Maximum adjust-on-exit value. */
- unsigned long sem_spare[4];
+ long semmni; /* Maximum number of unique semaphore
+ sets, system wide. */
+ long semmns; /* Maximum number of semaphores,
+ system wide. */
+ long semmsl; /* Maximum number of semaphores per
+ semaphore set. */
+ long semopm; /* Maximum number of operations per
+ semop call. */
+ long semmnu; /* Maximum number of undo structures,
+ system wide. */
+ long semume; /* Maximum number of undo entries per
+ undo structure. */
+ long semvmx; /* Maximum semaphore value. */
+ long semaem; /* Maximum adjust-on-exit value. */
+ long semmap; /* # of entries in semaphore map */
+ long semusz; /* size in bytes of undo structure */
+ long sem_spare[2];
};
/* Buffer type for semctl (SEM_INFO, ...) as used by ipcs(8).
*/
struct sem_info
{
- unsigned long sem_ids; /* Number of allocated semaphore sets. */
- unsigned long sem_num; /* Number of allocated semaphores. */
+ long sem_ids; /* Number of allocated semaphore sets. */
+ long sem_num; /* Number of allocated semaphores. */
};
+/* Permission flags */
+#define SEM_A IPC_W /* alter permission */
+#define SEM_R IPC_R /* read permission */
+
+/* Internally used mode bits. */
+#define SEM_ALLOC 01000 /* semaphore is allocated */
+
+#endif /* _KERNEL */
+
+#ifdef _KERNEL
+/* According to SUSv3, "the fourth argument [to semctl()] is optional and
+ depends upon the operation requested. If required, it is of type
+ union semun, which the application shall explicitly declare:" */
+union semun {
+ int val; /* value for SETVAL */
+ struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */
+ unsigned short *array; /* array for GETALL, SETALL */
+};
+/* Therefore this union is only declared here if building internal code.
+ _KERNEL must not be defined in exernal applications! Declare union
+ semun explicitely as required by SUSv3, please. */
+#endif /* _KERNEL */
+
int semctl (int semid, int semnum, int cmd, ...);
int semget (key_t key, int nsems, int semflg);
int semop (int semid, struct sembuf *sops, size_t nsops);
@@ -92,4 +125,4 @@ int semop (int semid, struct sembuf *sops, size_t nsops);
}
#endif
-#endif /* _SYS_SEM_H */
+#endif /* _CYGWIN_SEM_H */