Deleted Added
full compact
ibcs2_ipc.c (107839) ibcs2_ipc.c (107849)
1/*
2 * Copyright (c) 1995 Scott Bartram
3 * Copyright (c) 1995 Steven Wallace
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 8 unchanged lines hidden (view full) ---

17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
1/*
2 * Copyright (c) 1995 Scott Bartram
3 * Copyright (c) 1995 Steven Wallace
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 8 unchanged lines hidden (view full) ---

17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 * $FreeBSD: head/sys/i386/ibcs2/ibcs2_ipc.c 107839 2002-12-13 22:41:47Z alfred $
25 * $FreeBSD: head/sys/i386/ibcs2/ibcs2_ipc.c 107849 2002-12-14 01:56:26Z alfred $
26 */
27
28#include <sys/param.h>
29#include <sys/systm.h>
30#include <sys/msg.h>
31#include <sys/sem.h>
32#include <sys/shm.h>
33#include <sys/sysproto.h>

--- 67 unchanged lines hidden (view full) ---

101 return;
102}
103
104int
105ibcs2_msgsys(td, uap)
106 struct thread *td;
107 struct ibcs2_msgsys_args *uap;
108{
26 */
27
28#include <sys/param.h>
29#include <sys/systm.h>
30#include <sys/msg.h>
31#include <sys/sem.h>
32#include <sys/shm.h>
33#include <sys/sysproto.h>

--- 67 unchanged lines hidden (view full) ---

101 return;
102}
103
104int
105ibcs2_msgsys(td, uap)
106 struct thread *td;
107 struct ibcs2_msgsys_args *uap;
108{
109 switch (SCARG(uap, which)) {
109 switch (uap->which) {
110 case 0: /* msgget */
110 case 0: /* msgget */
111 SCARG(uap, which) = 1;
111 uap->which = 1;
112 return msgsys(td, (struct msgsys_args *)uap);
113 case 1: { /* msgctl */
114 int error;
115 struct msgsys_args margs;
116 caddr_t sg = stackgap_init();
117
112 return msgsys(td, (struct msgsys_args *)uap);
113 case 1: { /* msgctl */
114 int error;
115 struct msgsys_args margs;
116 caddr_t sg = stackgap_init();
117
118 SCARG(&margs, which) = 0;
119 SCARG(&margs, a2) = SCARG(uap, a2);
120 SCARG(&margs, a4) =
118 margs.which = 0;
119 margs.a2 = uap->a2;
120 margs.a4 =
121 (int)stackgap_alloc(&sg, sizeof(struct msqid_ds));
121 (int)stackgap_alloc(&sg, sizeof(struct msqid_ds));
122 SCARG(&margs, a3) = SCARG(uap, a3);
123 switch (SCARG(&margs, a3)) {
122 margs.a3 = uap->a3;
123 switch (margs.a3) {
124 case IBCS2_IPC_STAT:
125 error = msgsys(td, &margs);
126 if (!error)
127 cvt_msqid2imsqid(
124 case IBCS2_IPC_STAT:
125 error = msgsys(td, &margs);
126 if (!error)
127 cvt_msqid2imsqid(
128 (struct msqid_ds *)SCARG(&margs, a4),
129 (struct ibcs2_msqid_ds *)SCARG(uap, a4));
128 (struct msqid_ds *)margs.a4,
129 (struct ibcs2_msqid_ds *)uap->a4);
130 return error;
131 case IBCS2_IPC_SET:
130 return error;
131 case IBCS2_IPC_SET:
132 cvt_imsqid2msqid((struct ibcs2_msqid_ds *)SCARG(uap,
133 a4),
134 (struct msqid_ds *)SCARG(&margs, a4));
132 cvt_imsqid2msqid((struct ibcs2_msqid_ds *)uap->a4,
133 (struct msqid_ds *)margs.a4);
135 return msgsys(td, &margs);
136 case IBCS2_IPC_RMID:
137 return msgsys(td, &margs);
138 }
139 return EINVAL;
140 }
141 case 2: /* msgrcv */
134 return msgsys(td, &margs);
135 case IBCS2_IPC_RMID:
136 return msgsys(td, &margs);
137 }
138 return EINVAL;
139 }
140 case 2: /* msgrcv */
142 SCARG(uap, which) = 3;
141 uap->which = 3;
143 return msgsys(td, (struct msgsys_args *)uap);
144 case 3: /* msgsnd */
142 return msgsys(td, (struct msgsys_args *)uap);
143 case 3: /* msgsnd */
145 SCARG(uap, which) = 2;
144 uap->which = 2;
146 return msgsys(td, (struct msgsys_args *)uap);
147 default:
148 return EINVAL;
149 }
150}
151
152/*
153 * iBCS2 semsys call

--- 80 unchanged lines hidden (view full) ---

234
235int
236ibcs2_semsys(td, uap)
237 struct thread *td;
238 struct ibcs2_semsys_args *uap;
239{
240 int error;
241
145 return msgsys(td, (struct msgsys_args *)uap);
146 default:
147 return EINVAL;
148 }
149}
150
151/*
152 * iBCS2 semsys call

--- 80 unchanged lines hidden (view full) ---

233
234int
235ibcs2_semsys(td, uap)
236 struct thread *td;
237 struct ibcs2_semsys_args *uap;
238{
239 int error;
240
242 switch (SCARG(uap, which)) {
241 switch (uap->which) {
243 case 0: /* semctl */
242 case 0: /* semctl */
244 switch(SCARG(uap, a4)) {
243 switch(uap->a4) {
245 case IBCS2_IPC_STAT:
246 {
247 struct ibcs2_semid_ds *isp;
248 struct semid_ds *sp;
249 union semun *sup, ssu;
250 caddr_t sg = stackgap_init();
251
252
244 case IBCS2_IPC_STAT:
245 {
246 struct ibcs2_semid_ds *isp;
247 struct semid_ds *sp;
248 union semun *sup, ssu;
249 caddr_t sg = stackgap_init();
250
251
253 ssu = (union semun) SCARG(uap, a5);
252 ssu = (union semun) uap->a5;
254 sp = stackgap_alloc(&sg, sizeof(struct semid_ds));
255 sup = stackgap_alloc(&sg, sizeof(union semun));
256 sup->buf = sp;
253 sp = stackgap_alloc(&sg, sizeof(struct semid_ds));
254 sup = stackgap_alloc(&sg, sizeof(union semun));
255 sup->buf = sp;
257 SCARG(uap, a5) = (int)sup;
256 uap->a5 = (int)sup;
258 error = semsys(td, (struct semsys_args *)uap);
259 if (!error) {
257 error = semsys(td, (struct semsys_args *)uap);
258 if (!error) {
260 SCARG(uap, a5) = (int)ssu.buf;
259 uap->a5 = (int)ssu.buf;
261 isp = stackgap_alloc(&sg, sizeof(*isp));
262 cvt_semid2isemid(sp, isp);
263 error = copyout((caddr_t)isp,
264 (caddr_t)ssu.buf,
265 sizeof(*isp));
266 }
267 return error;
268 }
269 case IBCS2_IPC_SET:
270 {
271 struct ibcs2_semid_ds *isp;
272 struct semid_ds *sp;
273 caddr_t sg = stackgap_init();
274
275 isp = stackgap_alloc(&sg, sizeof(*isp));
276 sp = stackgap_alloc(&sg, sizeof(*sp));
260 isp = stackgap_alloc(&sg, sizeof(*isp));
261 cvt_semid2isemid(sp, isp);
262 error = copyout((caddr_t)isp,
263 (caddr_t)ssu.buf,
264 sizeof(*isp));
265 }
266 return error;
267 }
268 case IBCS2_IPC_SET:
269 {
270 struct ibcs2_semid_ds *isp;
271 struct semid_ds *sp;
272 caddr_t sg = stackgap_init();
273
274 isp = stackgap_alloc(&sg, sizeof(*isp));
275 sp = stackgap_alloc(&sg, sizeof(*sp));
277 error = copyin((caddr_t)SCARG(uap, a5), (caddr_t)isp,
276 error = copyin((caddr_t)uap->a5, (caddr_t)isp,
278 sizeof(*isp));
279 if (error)
280 return error;
281 cvt_isemid2semid(isp, sp);
277 sizeof(*isp));
278 if (error)
279 return error;
280 cvt_isemid2semid(isp, sp);
282 SCARG(uap, a5) = (int)sp;
281 uap->a5 = (int)sp;
283 return semsys(td, (struct semsys_args *)uap);
284 }
285 case IBCS2_SETVAL:
286 {
287 union semun *sp;
288 caddr_t sg = stackgap_init();
289
290 sp = stackgap_alloc(&sg, sizeof(*sp));
282 return semsys(td, (struct semsys_args *)uap);
283 }
284 case IBCS2_SETVAL:
285 {
286 union semun *sp;
287 caddr_t sg = stackgap_init();
288
289 sp = stackgap_alloc(&sg, sizeof(*sp));
291 sp->val = (int) SCARG(uap, a5);
292 SCARG(uap, a5) = (int)sp;
290 sp->val = (int) uap->a5;
291 uap->a5 = (int)sp;
293 return semsys(td, (struct semsys_args *)uap);
294 }
295 }
296
297 return semsys(td, (struct semsys_args *)uap);
298
299 case 1: /* semget */
300 return semsys(td, (struct semsys_args *)uap);

--- 45 unchanged lines hidden (view full) ---

346
347int
348ibcs2_shmsys(td, uap)
349 struct thread *td;
350 struct ibcs2_shmsys_args *uap;
351{
352 int error;
353
292 return semsys(td, (struct semsys_args *)uap);
293 }
294 }
295
296 return semsys(td, (struct semsys_args *)uap);
297
298 case 1: /* semget */
299 return semsys(td, (struct semsys_args *)uap);

--- 45 unchanged lines hidden (view full) ---

345
346int
347ibcs2_shmsys(td, uap)
348 struct thread *td;
349 struct ibcs2_shmsys_args *uap;
350{
351 int error;
352
354 switch (SCARG(uap, which)) {
353 switch (uap->which) {
355 case 0: /* shmat */
356 return shmsys(td, (struct shmsys_args *)uap);
357
358 case 1: /* shmctl */
354 case 0: /* shmat */
355 return shmsys(td, (struct shmsys_args *)uap);
356
357 case 1: /* shmctl */
359 switch(SCARG(uap, a3)) {
358 switch(uap->a3) {
360 case IBCS2_IPC_STAT:
361 {
362 struct ibcs2_shmid_ds *isp;
363 struct shmid_ds *sp;
364 caddr_t sg = stackgap_init();
365
359 case IBCS2_IPC_STAT:
360 {
361 struct ibcs2_shmid_ds *isp;
362 struct shmid_ds *sp;
363 caddr_t sg = stackgap_init();
364
366 isp = (struct ibcs2_shmid_ds *)SCARG(uap, a4);
365 isp = (struct ibcs2_shmid_ds *)uap->a4;
367 sp = stackgap_alloc(&sg, sizeof(*sp));
366 sp = stackgap_alloc(&sg, sizeof(*sp));
368 SCARG(uap, a4) = (int)sp;
367 uap->a4 = (int)sp;
369 error = shmsys(td, (struct shmsys_args *)uap);
370 if (!error) {
368 error = shmsys(td, (struct shmsys_args *)uap);
369 if (!error) {
371 SCARG(uap, a4) = (int)isp;
370 uap->a4 = (int)isp;
372 isp = stackgap_alloc(&sg, sizeof(*isp));
373 cvt_shmid2ishmid(sp, isp);
374 error = copyout((caddr_t)isp,
371 isp = stackgap_alloc(&sg, sizeof(*isp));
372 cvt_shmid2ishmid(sp, isp);
373 error = copyout((caddr_t)isp,
375 (caddr_t)SCARG(uap, a4),
374 (caddr_t)uap->a4,
376 sizeof(*isp));
377 }
378 return error;
379 }
380 case IBCS2_IPC_SET:
381 {
382 struct ibcs2_shmid_ds *isp;
383 struct shmid_ds *sp;
384 caddr_t sg = stackgap_init();
385
386 isp = stackgap_alloc(&sg, sizeof(*isp));
387 sp = stackgap_alloc(&sg, sizeof(*sp));
375 sizeof(*isp));
376 }
377 return error;
378 }
379 case IBCS2_IPC_SET:
380 {
381 struct ibcs2_shmid_ds *isp;
382 struct shmid_ds *sp;
383 caddr_t sg = stackgap_init();
384
385 isp = stackgap_alloc(&sg, sizeof(*isp));
386 sp = stackgap_alloc(&sg, sizeof(*sp));
388 error = copyin((caddr_t)SCARG(uap, a4), (caddr_t)isp,
387 error = copyin((caddr_t)uap->a4, (caddr_t)isp,
389 sizeof(*isp));
390 if (error)
391 return error;
392 cvt_ishmid2shmid(isp, sp);
388 sizeof(*isp));
389 if (error)
390 return error;
391 cvt_ishmid2shmid(isp, sp);
393 SCARG(uap, a4) = (int)sp;
392 uap->a4 = (int)sp;
394 return shmsys(td, (struct shmsys_args *)uap);
395 }
396 }
397
398 return shmsys(td, (struct shmsys_args *)uap);
399
400 case 2: /* shmdt */
401 return shmsys(td, (struct shmsys_args *)uap);
402
403 case 3: /* shmget */
404 return shmsys(td, (struct shmsys_args *)uap);
405 }
406 return EINVAL;
407}
393 return shmsys(td, (struct shmsys_args *)uap);
394 }
395 }
396
397 return shmsys(td, (struct shmsys_args *)uap);
398
399 case 2: /* shmdt */
400 return shmsys(td, (struct shmsys_args *)uap);
401
402 case 3: /* shmget */
403 return shmsys(td, (struct shmsys_args *)uap);
404 }
405 return EINVAL;
406}