root/compat/common/kern_ipc_10.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. compat_10_sys_semsys
  2. compat_10_sys_shmsys
  3. compat_10_sys_msgsys

    1 /*      $OpenBSD: kern_ipc_10.c,v 1.8 2004/05/05 05:18:17 mickey Exp $  */
    2 /*      $NetBSD: kern_ipc_10.c,v 1.4 1995/10/07 06:26:25 mycroft Exp $  */
    3 
    4 /*
    5  * Copyright (c) 1994 Adam Glass and Charles Hannum.  All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. All advertising materials mentioning features or use of this software
   16  *    must display the following acknowledgement:
   17  *      This product includes software developed by Adam Glass and Charles
   18  *      Hannum.
   19  * 4. The names of the authors may not be used to endorse or promote products
   20  *    derived from this software without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
   23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   24  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   25  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   27  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   31  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   32  */
   33 
   34 #include <sys/param.h>
   35 #include <sys/systm.h>
   36 #include <sys/kernel.h>
   37 #include <sys/proc.h>
   38 #include <sys/sem.h>
   39 #include <sys/malloc.h>
   40 
   41 #include <sys/mount.h>
   42 #include <sys/syscallargs.h>
   43 
   44 #include <uvm/uvm_extern.h>
   45 
   46 /*
   47  * Note that while we no longer have a COMPAT_10 kernel option,
   48  * there are other COMPAT_* options that need these old functions.
   49  */
   50 
   51 #if defined(SYSVSEM) && !defined(__LP64__)
   52 int
   53 compat_10_sys_semsys(p, v, retval)
   54         struct proc *p;
   55         void *v;
   56         register_t *retval;
   57 {
   58         struct compat_10_sys_semsys_args /* {
   59                 syscallarg(int) which;
   60                 syscallarg(int) a2;
   61                 syscallarg(int) a3;
   62                 syscallarg(int) a4;
   63                 syscallarg(int) a5;
   64         } */ *uap = v;
   65         struct sys___semctl_args /* {
   66                 syscallarg(int) semid;
   67                 syscallarg(int) semnum;
   68                 syscallarg(int) cmd;
   69                 syscallarg(union semun *) arg;
   70         } */ __semctl_args;
   71         struct sys_semget_args /* {
   72                 syscallarg(key_t) key;
   73                 syscallarg(int) nsems;
   74                 syscallarg(int) semflg;
   75         } */ semget_args;
   76         struct sys_semop_args /* {
   77                 syscallarg(int) semid;
   78                 syscallarg(struct sembuf *) sops;
   79                 syscallarg(u_int) nsops;
   80         } */ semop_args;
   81 
   82         switch (SCARG(uap, which)) {
   83         case 0:                                         /* __semctl() */
   84                 SCARG(&__semctl_args, semid) = SCARG(uap, a2);
   85                 SCARG(&__semctl_args, semnum) = SCARG(uap, a3);
   86                 SCARG(&__semctl_args, cmd) = SCARG(uap, a4);
   87                 SCARG(&__semctl_args, arg) = (union semun *)SCARG(uap, a5);
   88                 return (sys___semctl(p, &__semctl_args, retval));
   89 
   90         case 1:                                         /* semget() */
   91                 SCARG(&semget_args, key) = SCARG(uap, a2);
   92                 SCARG(&semget_args, nsems) = SCARG(uap, a3);
   93                 SCARG(&semget_args, semflg) = SCARG(uap, a4);
   94                 return (sys_semget(p, &semget_args, retval));
   95 
   96         case 2:                                         /* semop() */
   97                 SCARG(&semop_args, semid) = SCARG(uap, a2);
   98                 SCARG(&semop_args, sops) = (struct sembuf *)SCARG(uap, a3);
   99                 SCARG(&semop_args, nsops) = SCARG(uap, a4);
  100                 return (sys_semop(p, &semop_args, retval));
  101 
  102         default:
  103                 return (EINVAL);
  104         }
  105 }
  106 
  107 int
  108 compat_10_sys_shmsys(p, v, retval)
  109         struct proc *p;
  110         void *v;
  111         register_t *retval;
  112 {
  113         struct compat_10_sys_shmsys_args /* {
  114                 syscallarg(int) which;
  115                 syscallarg(int) a2;
  116                 syscallarg(int) a3;
  117                 syscallarg(int) a4;
  118         } */ *uap = v;
  119         struct sys_shmat_args /* {
  120                 syscallarg(int) shmid;
  121                 syscallarg(void *) shmaddr;
  122                 syscallarg(int) shmflg;
  123         } */ shmat_args;
  124         struct sys_shmctl_args /* {
  125                 syscallarg(int) shmid;
  126                 syscallarg(int) cmd;
  127                 syscallarg(struct shmid_ds *) buf;
  128         } */ shmctl_args;
  129         struct sys_shmdt_args /* {
  130                 syscallarg(void *) shmaddr;
  131         } */ shmdt_args;
  132         struct sys_shmget_args /* {
  133                 syscallarg(key_t) key;
  134                 syscallarg(int) size;
  135                 syscallarg(int) shmflg;
  136         } */ shmget_args;
  137 
  138         switch (SCARG(uap, which)) {
  139         case 0:                                         /* shmat() */
  140                 SCARG(&shmat_args, shmid) = SCARG(uap, a2);
  141                 SCARG(&shmat_args, shmaddr) = (void *)SCARG(uap, a3);
  142                 SCARG(&shmat_args, shmflg) = SCARG(uap, a4);
  143                 return (sys_shmat(p, &shmat_args, retval));
  144 
  145         case 1:                                         /* shmctl() */
  146                 SCARG(&shmctl_args, shmid) = SCARG(uap, a2);
  147                 SCARG(&shmctl_args, cmd) = SCARG(uap, a3);
  148                 SCARG(&shmctl_args, buf) = (struct shmid_ds *)SCARG(uap, a4);
  149                 return (sys_shmctl(p, &shmctl_args, retval));
  150 
  151         case 2:                                         /* shmdt() */
  152                 SCARG(&shmdt_args, shmaddr) = (void *)SCARG(uap, a2);
  153                 return (sys_shmdt(p, &shmdt_args, retval));
  154 
  155         case 3:                                         /* shmget() */
  156                 SCARG(&shmget_args, key) = SCARG(uap, a2);
  157                 SCARG(&shmget_args, size) = SCARG(uap, a3);
  158                 SCARG(&shmget_args, shmflg) = SCARG(uap, a4);
  159                 return (sys_shmget(p, &shmget_args, retval));
  160 
  161         default:
  162                 return (EINVAL);
  163         }
  164 }
  165 
  166 int
  167 compat_10_sys_msgsys(p, v, retval)
  168         struct proc *p;
  169         void *v;
  170         register_t *retval;
  171 {
  172         struct compat_10_sys_msgsys_args /* {
  173                 syscallarg(int) which;
  174                 syscallarg(int) a2;
  175                 syscallarg(int) a3;
  176                 syscallarg(int) a4;
  177                 syscallarg(int) a5;
  178                 syscallarg(int) a6;
  179         } */ *uap = v;
  180         struct sys_msgctl_args /* {
  181                 syscallarg(int) msqid;
  182                 syscallarg(int) cmd;
  183                 syscallarg(struct msqid_ds *) buf;
  184         } */ msgctl_args;
  185         struct sys_msgget_args /* {
  186                 syscallarg(key_t) key;
  187                 syscallarg(int) msgflg;
  188         } */ msgget_args;
  189         struct sys_msgsnd_args /* {
  190                 syscallarg(int) msqid;
  191                 syscallarg(void *) msgp;
  192                 syscallarg(size_t) msgsz;
  193                 syscallarg(int) msgflg;
  194         } */ msgsnd_args;
  195         struct sys_msgrcv_args /* {
  196                 syscallarg(int) msqid;
  197                 syscallarg(void *) msgp;
  198                 syscallarg(size_t) msgsz;
  199                 syscallarg(long) msgtyp;
  200                 syscallarg(int) msgflg;
  201         } */ msgrcv_args;
  202 
  203         switch (SCARG(uap, which)) {
  204         case 0:                                 /* msgctl()*/
  205                 SCARG(&msgctl_args, msqid) = SCARG(uap, a2);
  206                 SCARG(&msgctl_args, cmd) = SCARG(uap, a3);
  207                 SCARG(&msgctl_args, buf) =
  208                     (struct msqid_ds *)SCARG(uap, a4);
  209                 return (sys_msgctl(p, &msgctl_args, retval));
  210 
  211         case 1:                                 /* msgget() */
  212                 SCARG(&msgget_args, key) = SCARG(uap, a2);
  213                 SCARG(&msgget_args, msgflg) = SCARG(uap, a3);
  214                 return (sys_msgget(p, &msgget_args, retval));
  215 
  216         case 2:                                 /* msgsnd() */
  217                 SCARG(&msgsnd_args, msqid) = SCARG(uap, a2);
  218                 SCARG(&msgsnd_args, msgp) = (void *)SCARG(uap, a3);
  219                 SCARG(&msgsnd_args, msgsz) = SCARG(uap, a4);
  220                 SCARG(&msgsnd_args, msgflg) = SCARG(uap, a5);
  221                 return (sys_msgsnd(p, &msgsnd_args, retval));
  222 
  223         case 3:                                 /* msgrcv() */
  224                 SCARG(&msgrcv_args, msqid) = SCARG(uap, a2);
  225                 SCARG(&msgrcv_args, msgp) = (void *)SCARG(uap, a3);
  226                 SCARG(&msgrcv_args, msgsz) = SCARG(uap, a4);
  227                 SCARG(&msgrcv_args, msgtyp) = SCARG(uap, a5);
  228                 SCARG(&msgrcv_args, msgflg) = SCARG(uap, a6);
  229                 return (sys_msgrcv(p, &msgrcv_args, retval));
  230 
  231         default:
  232                 return (EINVAL);
  233         }
  234 }
  235 #endif

/* [<][>][^][v][top][bottom][index][help] */