]>
sourceware.org Git - newlib-cygwin.git/blob - winsup/cygwin/msg.cc
1 /* msg.cc: XSI IPC interface for Cygwin.
3 Copyright 2002, 2003, 2004, 2005, 2008, 2009 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
17 #include "cygserver_msg.h"
20 * client_request_msg Constructors
23 client_request_msg::client_request_msg (int msqid
,
26 : client_request (CYGSERVER_REQUEST_MSG
, &_parameters
, sizeof (_parameters
))
28 _parameters
.in
.msgop
= MSGOP_msgctl
;
29 ipc_set_proc_info (_parameters
.in
.ipcblk
);
31 _parameters
.in
.ctlargs
.msqid
= msqid
;
32 _parameters
.in
.ctlargs
.cmd
= cmd
;
33 _parameters
.in
.ctlargs
.buf
= buf
;
35 msglen (sizeof (_parameters
.in
));
38 client_request_msg::client_request_msg (key_t key
,
40 : client_request (CYGSERVER_REQUEST_MSG
, &_parameters
, sizeof (_parameters
))
42 _parameters
.in
.msgop
= MSGOP_msgget
;
43 ipc_set_proc_info (_parameters
.in
.ipcblk
);
45 _parameters
.in
.getargs
.key
= key
;
46 _parameters
.in
.getargs
.msgflg
= msgflg
;
48 msglen (sizeof (_parameters
.in
));
51 client_request_msg::client_request_msg (int msqid
,
56 : client_request (CYGSERVER_REQUEST_MSG
, &_parameters
, sizeof (_parameters
))
58 _parameters
.in
.msgop
= MSGOP_msgrcv
;
59 ipc_set_proc_info (_parameters
.in
.ipcblk
);
61 _parameters
.in
.rcvargs
.msqid
= msqid
;
62 _parameters
.in
.rcvargs
.msgp
= msgp
;
63 _parameters
.in
.rcvargs
.msgsz
= msgsz
;
64 _parameters
.in
.rcvargs
.msgtyp
= msgtyp
;
65 _parameters
.in
.rcvargs
.msgflg
= msgflg
;
67 msglen (sizeof (_parameters
.in
));
70 client_request_msg::client_request_msg (int msqid
,
74 : client_request (CYGSERVER_REQUEST_MSG
, &_parameters
, sizeof (_parameters
))
76 _parameters
.in
.msgop
= MSGOP_msgsnd
;
77 ipc_set_proc_info (_parameters
.in
.ipcblk
);
79 _parameters
.in
.sndargs
.msqid
= msqid
;
80 _parameters
.in
.sndargs
.msgp
= msgp
;
81 _parameters
.in
.sndargs
.msgsz
= msgsz
;
82 _parameters
.in
.sndargs
.msgflg
= msgflg
;
84 msglen (sizeof (_parameters
.in
));
88 * XSI message queue API. These are exported by the DLL.
92 msgctl (int msqid
, int cmd
, struct msqid_ds
*buf
)
94 syscall_printf ("msgctl (msqid = %d, cmd = 0x%x, buf = %p)",
97 if (efault
.faulted (EFAULT
))
112 syscall_printf ("-1 [%d] = msgctl ()", EINVAL
);
116 client_request_msg
request (msqid
, cmd
, buf
);
117 if (request
.make_request () == -1 || request
.retval () == -1)
119 syscall_printf ("-1 [%d] = msgctl ()", request
.error_code ());
120 set_errno (request
.error_code ());
121 if (request
.error_code () == ENOSYS
)
125 return request
.retval ();
129 msgget (key_t key
, int msgflg
)
131 syscall_printf ("msgget (key = %U, msgflg = 0x%x)", key
, msgflg
);
132 client_request_msg
request (key
, msgflg
);
133 if (request
.make_request () == -1 || request
.retval () == -1)
135 syscall_printf ("-1 [%d] = msgget ()", request
.error_code ());
136 set_errno (request
.error_code ());
137 if (request
.error_code () == ENOSYS
)
141 return request
.retval ();
145 msgrcv (int msqid
, void *msgp
, size_t msgsz
, long msgtyp
, int msgflg
)
147 syscall_printf ("msgrcv (msqid = %d, msgp = %p, msgsz = %d, "
148 "msgtyp = %d, msgflg = 0x%x)",
149 msqid
, msgp
, msgsz
, msgtyp
, msgflg
);
151 if (efault
.faulted (EFAULT
))
153 client_request_msg
request (msqid
, msgp
, msgsz
, msgtyp
, msgflg
);
154 if (request
.make_request () == -1 || request
.rcvval () == -1)
156 syscall_printf ("-1 [%d] = msgrcv ()", request
.error_code ());
157 set_errno (request
.error_code ());
158 if (request
.error_code () == ENOSYS
)
162 return request
.rcvval ();
166 msgsnd (int msqid
, const void *msgp
, size_t msgsz
, int msgflg
)
168 syscall_printf ("msgsnd (msqid = %d, msgp = %p, msgsz = %d, msgflg = 0x%x)",
169 msqid
, msgp
, msgsz
, msgflg
);
171 if (efault
.faulted (EFAULT
))
173 client_request_msg
request (msqid
, msgp
, msgsz
, msgflg
);
174 if (request
.make_request () == -1 || request
.retval () == -1)
176 syscall_printf ("-1 [%d] = msgsnd ()", request
.error_code ());
177 set_errno (request
.error_code ());
178 if (request
.error_code () == ENOSYS
)
182 return request
.retval ();
This page took 0.042182 seconds and 5 git commands to generate.