]>
sourceware.org Git - newlib-cygwin.git/blob - winsup/cygwin/msg.cc
1 /* msg.cc: XSI IPC interface for Cygwin.
3 Copyright 2003 Red Hat, Inc.
5 This file is part of Cygwin.
7 This software is a copyrighted work licensed under the terms of the
8 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
18 #include "cygserver_msg.h"
21 * client_request_msg Constructors
24 client_request_msg::client_request_msg (int msqid
,
27 : client_request (CYGSERVER_REQUEST_MSG
, &_parameters
, sizeof (_parameters
))
29 _parameters
.in
.msgop
= MSGOP_msgctl
;
30 ipc_set_proc_info (_parameters
.in
.ipcblk
);
32 _parameters
.in
.ctlargs
.msqid
= msqid
;
33 _parameters
.in
.ctlargs
.cmd
= cmd
;
34 _parameters
.in
.ctlargs
.buf
= buf
;
36 msglen (sizeof (_parameters
.in
));
39 client_request_msg::client_request_msg (key_t key
,
41 : client_request (CYGSERVER_REQUEST_MSG
, &_parameters
, sizeof (_parameters
))
43 _parameters
.in
.msgop
= MSGOP_msgget
;
44 ipc_set_proc_info (_parameters
.in
.ipcblk
);
46 _parameters
.in
.getargs
.key
= key
;
47 _parameters
.in
.getargs
.msgflg
= msgflg
;
49 msglen (sizeof (_parameters
.in
));
52 client_request_msg::client_request_msg (int msqid
,
57 : client_request (CYGSERVER_REQUEST_MSG
, &_parameters
, sizeof (_parameters
))
59 _parameters
.in
.msgop
= MSGOP_msgrcv
;
60 ipc_set_proc_info (_parameters
.in
.ipcblk
);
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
;
68 msglen (sizeof (_parameters
.in
));
71 client_request_msg::client_request_msg (int msqid
,
75 : client_request (CYGSERVER_REQUEST_MSG
, &_parameters
, sizeof (_parameters
))
77 _parameters
.in
.msgop
= MSGOP_msgsnd
;
78 ipc_set_proc_info (_parameters
.in
.ipcblk
);
80 _parameters
.in
.sndargs
.msqid
= msqid
;
81 _parameters
.in
.sndargs
.msgp
= msgp
;
82 _parameters
.in
.sndargs
.msgsz
= msgsz
;
83 _parameters
.in
.sndargs
.msgflg
= msgflg
;
85 msglen (sizeof (_parameters
.in
));
87 #endif /* USE_SERVER */
90 * XSI message queue API. These are exported by the DLL.
94 msgctl (int msqid
, int cmd
, struct msqid_ds
*buf
)
97 syscall_printf ("msgctl (msqid = %d, cmd = 0x%x, buf = %p)",
100 if (efault
.faulted (EFAULT
))
115 syscall_printf ("-1 [%d] = msgctl ()", EINVAL
);
119 client_request_msg
request (msqid
, cmd
, buf
);
120 if (request
.make_request () == -1 || request
.retval () == -1)
122 syscall_printf ("-1 [%d] = msgctl ()", request
.error_code ());
123 set_errno (request
.error_code ());
124 if (request
.error_code () == ENOSYS
)
128 return request
.retval ();
137 msgget (key_t key
, int msgflg
)
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)
144 syscall_printf ("-1 [%d] = msgget ()", request
.error_code ());
145 set_errno (request
.error_code ());
146 if (request
.error_code () == ENOSYS
)
150 return request
.retval ();
159 msgrcv (int msqid
, void *msgp
, size_t msgsz
, long msgtyp
, int msgflg
)
162 syscall_printf ("msgrcv (msqid = %d, msgp = %p, msgsz = %d, "
163 "msgtyp = %d, msgflg = 0x%x)",
164 msqid
, msgp
, msgsz
, msgtyp
, msgflg
);
166 if (efault
.faulted (EFAULT
))
168 client_request_msg
request (msqid
, msgp
, msgsz
, msgtyp
, msgflg
);
169 if (request
.make_request () == -1 || request
.rcvval () == -1)
171 syscall_printf ("-1 [%d] = msgrcv ()", request
.error_code ());
172 set_errno (request
.error_code ());
173 if (request
.error_code () == ENOSYS
)
177 return request
.rcvval ();
186 msgsnd (int msqid
, const void *msgp
, size_t msgsz
, int msgflg
)
189 syscall_printf ("msgsnd (msqid = %d, msgp = %p, msgsz = %d, msgflg = 0x%x)",
190 msqid
, msgp
, msgsz
, msgflg
);
192 if (efault
.faulted (EFAULT
))
194 client_request_msg
request (msqid
, msgp
, msgsz
, msgflg
);
195 if (request
.make_request () == -1 || request
.retval () == -1)
197 syscall_printf ("-1 [%d] = msgsnd ()", request
.error_code ());
198 set_errno (request
.error_code ());
199 if (request
.error_code () == ENOSYS
)
203 return request
.retval ();
This page took 0.042806 seconds and 5 git commands to generate.