/* cygserver_sem.h: Single unix specification IPC interface for Cygwin. This file is part of Cygwin. This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ #ifndef __CYGSERVER_SEM_H__ #define __CYGSERVER_SEM_H__ #include #include #ifndef _KERNEL #define _KERNEL 1 #endif #include #include "cygserver.h" #include "cygserver_ipc.h" #ifndef __INSIDE_CYGWIN__ class transport_layer_base; class process_cache; #endif class client_request_sem : public client_request { friend class client_request; public: enum semop_t { SEMOP_semctl, SEMOP_semget, SEMOP_semop }; private: union { struct { semop_t semop; proc ipcblk; union { struct semctl_args ctlargs; struct semget_args getargs; struct semop_args opargs; }; } in; union { int ret; } out; } _parameters; #ifndef __INSIDE_CYGWIN__ client_request_sem (); virtual void serve (transport_layer_base *, process_cache *); #endif public: #ifdef __INSIDE_CYGWIN__ client_request_sem (int, int, int, union semun *); // semctl client_request_sem (key_t, int, int); // semget client_request_sem (int, struct sembuf *, size_t); // semop #endif int retval () const { return msglen () ? _parameters.out.ret : -1; } }; #ifndef __INSIDE_CYGWIN__ int seminit (); int semunload (); void semexit_myhook(void *arg, struct proc *p); int semctl (struct thread *, struct semctl_args *); int semget (struct thread *, struct semget_args *); int semop (struct thread *, struct semop_args *); #endif #endif /* __CYGSERVER_SEM_H__ */