]>
Commit | Line | Data |
---|---|---|
e217832c CV |
1 | /* cygserver_ipc.h |
2 | ||
61522196 | 3 | Copyright 2002, 2003, 2004, 2012, 2013 Red Hat, Inc. |
e217832c CV |
4 | |
5 | This file is part of Cygwin. | |
6 | ||
7 | This software is a copyrighted work licensed under the terms of the | |
8 | Cygwin license. Please consult the file "CYGWIN_LICENSE" for | |
9 | details. */ | |
10 | ||
11 | #ifndef __CYGSERVER_IPC_H__ | |
12 | #define __CYGSERVER_IPC_H__ | |
13 | ||
e217832c | 14 | /* |
a6df500f | 15 | * Datastructure which is part of any IPC input parameter block. |
e217832c | 16 | */ |
a6df500f CV |
17 | struct vmspace { |
18 | void *vm_map; /* UNUSED */ | |
19 | struct shmmap_state *vm_shm; | |
20 | }; | |
21 | ||
22 | struct proc { | |
23 | pid_t cygpid; | |
24 | DWORD winpid; | |
61522196 CV |
25 | uid_t uid; |
26 | gid_t gid; | |
a6df500f | 27 | int gidcnt; |
61522196 | 28 | gid_t *gidlist; |
a6df500f CV |
29 | bool is_admin; |
30 | struct vmspace *p_vmspace; | |
2a566ac3 | 31 | HANDLE signal_arrived; |
a6df500f CV |
32 | }; |
33 | ||
34 | #ifdef __INSIDE_CYGWIN__ | |
33a6952b | 35 | #include "sigproc.h" |
c3a46349 | 36 | extern inline void |
a6df500f CV |
37 | ipc_set_proc_info (proc &blk) |
38 | { | |
39 | blk.cygpid = getpid (); | |
40 | blk.winpid = GetCurrentProcessId (); | |
41 | blk.uid = geteuid32 (); | |
42 | blk.gid = getegid32 (); | |
43 | blk.gidcnt = 0; | |
44 | blk.gidlist = NULL; | |
45 | blk.is_admin = false; | |
962f9a2c | 46 | _my_tls.set_signal_arrived (true, blk.signal_arrived); |
a6df500f CV |
47 | } |
48 | #endif /* __INSIDE_CYGWIN__ */ | |
49 | ||
50 | #ifndef __INSIDE_CYGWIN__ | |
51 | class ipc_retval { | |
52 | private: | |
53 | union { | |
54 | int i; | |
61522196 CV |
55 | ssize_t ssz; |
56 | size_t sz; | |
a6df500f CV |
57 | vm_offset_t off; |
58 | vm_object_t obj; | |
e217832c CV |
59 | }; |
60 | ||
a6df500f CV |
61 | public: |
62 | ipc_retval (int ni) { i = ni; } | |
e217832c | 63 | |
a6df500f CV |
64 | operator int () const { return i; } |
65 | int operator = (int ni) { return i = ni; } | |
e217832c | 66 | |
61522196 CV |
67 | #ifndef __x86_64__ |
68 | /* On x86_64: size_t == vm_offset_t == unsigned long */ | |
69 | operator size_t () const { return sz; } | |
70 | size_t operator = (size_t nsz) { return sz = nsz; } | |
71 | #else | |
72 | /* On i686: ssize_t == long == int */ | |
73 | operator ssize_t () const { return ssz; } | |
74 | ssize_t operator = (ssize_t nssz) { return ssz = nssz; } | |
75 | #endif | |
e217832c | 76 | |
a6df500f CV |
77 | operator vm_offset_t () const { return off; } |
78 | vm_offset_t operator = (vm_offset_t noff) { return off = noff; } | |
e217832c | 79 | |
a6df500f CV |
80 | operator vm_object_t () const { return obj; } |
81 | vm_object_t operator = (vm_object_t nobj) { return obj = nobj; } | |
82 | }; | |
e217832c | 83 | |
a6df500f CV |
84 | struct thread { |
85 | class process *client; | |
86 | proc *ipcblk; | |
87 | ipc_retval td_retval[2]; | |
88 | }; | |
89 | #define td_proc ipcblk | |
90 | #define p_pid cygpid | |
91 | #endif | |
e217832c CV |
92 | |
93 | #endif /* __CYGSERVER_IPC_H__ */ |