A litte trouble with declarations of boot() and panic() resolved. gcc-2.5.8
[unix-history] / sys / kern / sysv_shm.c
index 0d87d52..bff596a 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     from: Utah $Hdr: uipc_shm.c 1.9 89/08/14$
  *     from: @(#)sysv_shm.c    7.15 (Berkeley) 5/13/91
  *
  *     from: Utah $Hdr: uipc_shm.c 1.9 89/08/14$
  *     from: @(#)sysv_shm.c    7.15 (Berkeley) 5/13/91
- *     $Id: sysv_shm.c,v 1.5 1993/11/07 17:46:20 wollman Exp $
+ *     $Id: sysv_shm.c,v 1.8 1993/12/20 19:31:18 wollman Exp $
  */
 
 /*
  */
 
 /*
@@ -59,6 +59,7 @@
 #include "vm/vm_kern.h"
 #include "vm/vm_inherit.h"
 #include "vm/vm_pager.h"
 #include "vm/vm_kern.h"
 #include "vm/vm_inherit.h"
 #include "vm/vm_pager.h"
+#include "vm/vm_user.h"
 
 #ifdef HPUXCOMPAT
 #include "hp300/hpux/hpux.h"
 
 #ifdef HPUXCOMPAT
 #include "hp300/hpux/hpux.h"
@@ -89,8 +90,11 @@ struct       shmhandle {
        caddr_t         shmh_id;
 };
 
        caddr_t         shmh_id;
 };
 
+static int ipcaccess(struct ipc_perm *, int, struct ucred *);
 static void shmufree(struct proc *, struct shmdesc *);
 static void shmfree(struct shmid_ds *);
 static void shmufree(struct proc *, struct shmdesc *);
 static void shmfree(struct shmid_ds *);
+static int shmvalid(int);
+
 
 vm_map_t shm_map;      /* address space for shared memory segments */
 
 
 vm_map_t shm_map;      /* address space for shared memory segments */
 
@@ -110,6 +114,8 @@ shminit()
        }
 }
 
        }
 }
 
+TEXT_SET(pseudo_set, shminit);
+
 /*
  * Entry point for all SHM calls
  */
 /*
  * Entry point for all SHM calls
  */
@@ -193,7 +199,7 @@ shmget(p, uap, retval)
                shmh = (struct shmhandle *)
                        malloc(sizeof(struct shmhandle), M_SHM, M_WAITOK);
                shmh->shmh_kva = 0;
                shmh = (struct shmhandle *)
                        malloc(sizeof(struct shmhandle), M_SHM, M_WAITOK);
                shmh->shmh_kva = 0;
-               shmh->shmh_id = (caddr_t)(0xc0000000|rval);     /* XXX */
+               shmh->shmh_id = (caddr_t)(0xc0000000UL|rval);   /* XXX */
                error = vm_mmap(shm_map, &shmh->shmh_kva, ctob(size),
                                VM_PROT_ALL, VM_PROT_DEFAULT, MAP_ANON, shmh->shmh_id, 0);
                if (error) {
                error = vm_mmap(shm_map, &shmh->shmh_kva, ctob(size),
                                VM_PROT_ALL, VM_PROT_DEFAULT, MAP_ANON, shmh->shmh_id, 0);
                if (error) {
@@ -368,9 +374,11 @@ shmat(p, uap, retval)
        if (uva)
                flags |= MAP_FIXED;
        else
        if (uva)
                flags |= MAP_FIXED;
        else
-               uva = (caddr_t)0x1000000;       /* XXX */
-       error = vm_mmap(&p->p_vmspace->vm_map, &uva, (vm_size_t)size, prot, VM_PROT_DEFAULT,
-           flags, ((struct shmhandle *)shp->shm_handle)->shmh_id, 0);
+               uva = (caddr_t)0x1000000UL;     /* XXX */
+       error = vm_mmap(&p->p_vmspace->vm_map, (vm_offset_t *)&uva,
+                       (vm_size_t)size, prot, VM_PROT_DEFAULT,
+                       flags, ((struct shmhandle *)shp->shm_handle)->shmh_id,
+                       0);
        if (error)
                return(error);
        shmd->shmd_uva = (vm_offset_t)uva;
        if (error)
                return(error);
        shmd->shmd_uva = (vm_offset_t)uva;
@@ -453,7 +461,7 @@ shmexit(p)
        p->p_vmspace->vm_shm = NULL;
 }
 
        p->p_vmspace->vm_shm = NULL;
 }
 
-int
+static int
 shmvalid(id)
        register int id;
 {
 shmvalid(id)
        register int id;
 {
@@ -519,36 +527,4 @@ shmfree(shp)
        if ((int)(shp->shm_perm.seq * SHMMMNI) < 0)
                shp->shm_perm.seq = 0;
 }
        if ((int)(shp->shm_perm.seq * SHMMMNI) < 0)
                shp->shm_perm.seq = 0;
 }
-
-/*
- * XXX This routine would be common to all sysV style IPC
- *     (if the others were implemented).
- */
-int
-ipcaccess(ipc, mode, cred)
-       register struct ipc_perm *ipc;
-       int mode;
-       register struct ucred *cred;
-{
-       register int m;
-
-       if (cred->cr_uid == 0)
-               return(0);
-       /*
-        * Access check is based on only one of owner, group, public.
-        * If not owner, then check group.
-        * If not a member of the group, then check public access.
-        */
-       mode &= 0700;
-       m = ipc->mode;
-       if (cred->cr_uid != ipc->uid && cred->cr_uid != ipc->cuid) {
-               m <<= 3;
-               if (!groupmember(ipc->gid, cred) &&
-                   !groupmember(ipc->cgid, cred))
-                       m <<= 3;
-       }
-       if ((mode&m) == mode)
-               return (0);
-       return (EACCES);
-}
 #endif /* SYSVSHM */
 #endif /* SYSVSHM */