]> sourceware.org Git - newlib-cygwin.git/blob - winsup/cygwin/msg.cc
Remove unneeded header files from source files throughout.
[newlib-cygwin.git] / winsup / cygwin / msg.cc
1 /* msg.cc: XSI IPC interface for Cygwin.
2
3 Copyright 2003 Red Hat, Inc.
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 #include "winsup.h"
12 #ifdef USE_SERVER
13 #include <unistd.h>
14
15 #include "sigproc.h"
16 #include "cygtls.h"
17
18 #include "cygserver_msg.h"
19
20 /*
21 * client_request_msg Constructors
22 */
23
24 client_request_msg::client_request_msg (int msqid,
25 int cmd,
26 struct msqid_ds *buf)
27 : client_request (CYGSERVER_REQUEST_MSG, &_parameters, sizeof (_parameters))
28 {
29 _parameters.in.msgop = MSGOP_msgctl;
30 ipc_set_proc_info (_parameters.in.ipcblk);
31
32 _parameters.in.ctlargs.msqid = msqid;
33 _parameters.in.ctlargs.cmd = cmd;
34 _parameters.in.ctlargs.buf = buf;
35
36 msglen (sizeof (_parameters.in));
37 }
38
39 client_request_msg::client_request_msg (key_t key,
40 int msgflg)
41 : client_request (CYGSERVER_REQUEST_MSG, &_parameters, sizeof (_parameters))
42 {
43 _parameters.in.msgop = MSGOP_msgget;
44 ipc_set_proc_info (_parameters.in.ipcblk);
45
46 _parameters.in.getargs.key = key;
47 _parameters.in.getargs.msgflg = msgflg;
48
49 msglen (sizeof (_parameters.in));
50 }
51
52 client_request_msg::client_request_msg (int msqid,
53 void *msgp,
54 size_t msgsz,
55 long msgtyp,
56 int msgflg)
57 : client_request (CYGSERVER_REQUEST_MSG, &_parameters, sizeof (_parameters))
58 {
59 _parameters.in.msgop = MSGOP_msgrcv;
60 ipc_set_proc_info (_parameters.in.ipcblk);
61
62 _parameters.in.rcvargs.msqid = msqid;
63 _parameters.in.rcvargs.msgp = msgp;
64 _parameters.in.rcvargs.msgsz = msgsz;
65 _parameters.in.rcvargs.msgtyp = msgtyp;
66 _parameters.in.rcvargs.msgflg = msgflg;
67
68 msglen (sizeof (_parameters.in));
69 }
70
71 client_request_msg::client_request_msg (int msqid,
72 const void *msgp,
73 size_t msgsz,
74 int msgflg)
75 : client_request (CYGSERVER_REQUEST_MSG, &_parameters, sizeof (_parameters))
76 {
77 _parameters.in.msgop = MSGOP_msgsnd;
78 ipc_set_proc_info (_parameters.in.ipcblk);
79
80 _parameters.in.sndargs.msqid = msqid;
81 _parameters.in.sndargs.msgp = msgp;
82 _parameters.in.sndargs.msgsz = msgsz;
83 _parameters.in.sndargs.msgflg = msgflg;
84
85 msglen (sizeof (_parameters.in));
86 }
87 #endif /* USE_SERVER */
88
89 /*
90 * XSI message queue API. These are exported by the DLL.
91 */
92
93 extern "C" int
94 msgctl (int msqid, int cmd, struct msqid_ds *buf)
95 {
96 #ifdef USE_SERVER
97 syscall_printf ("msgctl (msqid = %d, cmd = 0x%x, buf = %p)",
98 msqid, cmd, buf);
99 myfault efault;
100 if (efault.faulted (EFAULT))
101 return -1;
102 switch (cmd)
103 {
104 case IPC_STAT:
105 break;
106 case IPC_SET:
107 break;
108 case IPC_RMID:
109 break;
110 case IPC_INFO:
111 break;
112 case MSG_INFO:
113 break;
114 default:
115 syscall_printf ("-1 [%d] = msgctl ()", EINVAL);
116 set_errno (EINVAL);
117 return -1;
118 }
119 client_request_msg request (msqid, cmd, buf);
120 if (request.make_request () == -1 || request.retval () == -1)
121 {
122 syscall_printf ("-1 [%d] = msgctl ()", request.error_code ());
123 set_errno (request.error_code ());
124 if (request.error_code () == ENOSYS)
125 raise (SIGSYS);
126 return -1;
127 }
128 return request.retval ();
129 #else
130 set_errno (ENOSYS);
131 raise (SIGSYS);
132 return -1;
133 #endif
134 }
135
136 extern "C" int
137 msgget (key_t key, int msgflg)
138 {
139 #ifdef USE_SERVER
140 syscall_printf ("msgget (key = %U, msgflg = 0x%x)", key, msgflg);
141 client_request_msg request (key, msgflg);
142 if (request.make_request () == -1 || request.retval () == -1)
143 {
144 syscall_printf ("-1 [%d] = msgget ()", request.error_code ());
145 set_errno (request.error_code ());
146 if (request.error_code () == ENOSYS)
147 raise (SIGSYS);
148 return -1;
149 }
150 return request.retval ();
151 #else
152 set_errno (ENOSYS);
153 raise (SIGSYS);
154 return -1;
155 #endif
156 }
157
158 extern "C" ssize_t
159 msgrcv (int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg)
160 {
161 #ifdef USE_SERVER
162 syscall_printf ("msgrcv (msqid = %d, msgp = %p, msgsz = %d, "
163 "msgtyp = %d, msgflg = 0x%x)",
164 msqid, msgp, msgsz, msgtyp, msgflg);
165 myfault efault;
166 if (efault.faulted (EFAULT))
167 return -1;
168 client_request_msg request (msqid, msgp, msgsz, msgtyp, msgflg);
169 if (request.make_request () == -1 || request.rcvval () == -1)
170 {
171 syscall_printf ("-1 [%d] = msgrcv ()", request.error_code ());
172 set_errno (request.error_code ());
173 if (request.error_code () == ENOSYS)
174 raise (SIGSYS);
175 return -1;
176 }
177 return request.rcvval ();
178 #else
179 set_errno (ENOSYS);
180 raise (SIGSYS);
181 return -1;
182 #endif
183 }
184
185 extern "C" int
186 msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg)
187 {
188 #ifdef USE_SERVER
189 syscall_printf ("msgsnd (msqid = %d, msgp = %p, msgsz = %d, msgflg = 0x%x)",
190 msqid, msgp, msgsz, msgflg);
191 myfault efault;
192 if (efault.faulted (EFAULT))
193 return -1;
194 client_request_msg request (msqid, msgp, msgsz, msgflg);
195 if (request.make_request () == -1 || request.retval () == -1)
196 {
197 syscall_printf ("-1 [%d] = msgsnd ()", request.error_code ());
198 set_errno (request.error_code ());
199 if (request.error_code () == ENOSYS)
200 raise (SIGSYS);
201 return -1;
202 }
203 return request.retval ();
204 #else
205 set_errno (ENOSYS);
206 raise (SIGSYS);
207 return -1;
208 #endif
209 }
This page took 0.042806 seconds and 5 git commands to generate.