]> Zhao Yanbai Git Server - minix.git/commitdiff
custom message for SHMGET
authorBen Gras <ben@minix3.org>
Sat, 26 Jul 2014 11:53:51 +0000 (13:53 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:06:19 +0000 (17:06 +0200)
include/minix/com.h
include/minix/ipc.h
lib/libc/sys-minix/shmget.c
servers/ipc/shm.c

index dca4f0c8c8b9c7ed5983b345ef86c6c24aa4bae7..942b131e2d05ba920e3cffa6c65700d04ea6500f 100644 (file)
 
 /* Shared Memory */
 #define IPC_SHMGET     (IPC_BASE+1)
-#      define SHMGET_KEY       m2_l1
-#      define SHMGET_SIZE      m2_l2
-#      define SHMGET_FLAG      m2_i1
-#      define SHMGET_RETID     m2_i2
 #define IPC_SHMAT      (IPC_BASE+2)
 #      define SHMAT_ID         m2_i1
 #      define SHMAT_ADDR       m2_l1
index c65982e9c855fa00245804d30baee4766821607d..19aeb8bec29683e885571e91afe3cee59ca0dfb9 100644 (file)
@@ -5,6 +5,7 @@
 #include <minix/type.h>
 #include <minix/const.h>
 #include <sys/signal.h>
+#include <sys/types.h>
 
 /*==========================================================================* 
  * Types relating to messages.                                                     *
@@ -1764,6 +1765,15 @@ typedef struct {
 } mess_lsys_vm_watch_exit;
 _ASSERT_MSG_SIZE(mess_lsys_vm_watch_exit);
 
+typedef struct {
+       key_t           key;
+       size_t          size;
+       int             flag;
+       int             retid;
+       uint8_t         padding[40];
+} mess_lc_ipc_shmget;
+_ASSERT_MSG_SIZE(mess_lc_ipc_shmget);
+
 typedef struct {
        endpoint_t m_source;            /* who sent the message */
        int m_type;                     /* what kind of message is it */
@@ -1990,6 +2000,7 @@ typedef struct {
                mess_lsys_vm_info       m_lsys_vm_info;
                mess_lsys_vm_update     m_lsys_vm_update;
                mess_lsys_vm_watch_exit m_lsys_vm_watch_exit;
+               mess_lc_ipc_shmget      m_lc_ipc_shmget;
 
                mess_vfs_lchardriver_cancel     m_vfs_lchardriver_cancel;
                mess_vfs_lchardriver_openclose  m_vfs_lchardriver_openclose;
index ca83cd3f2c28f62cf94ed5b810fa40d8f6a77636..5cb373daf131b1de018151ae0625f4fa4277ba40 100644 (file)
@@ -30,12 +30,12 @@ int shmget(key_t key, size_t size, int shmflg)
        }
 
        memset(&m, 0, sizeof(m));
-       m.SHMGET_KEY = key;
-       m.SHMGET_SIZE = size;
-       m.SHMGET_FLAG = shmflg;
+       m.m_lc_ipc_shmget.key = key;
+       m.m_lc_ipc_shmget.size = size;
+       m.m_lc_ipc_shmget.flag = shmflg;
 
        r = _syscall(ipc_pt, IPC_SHMGET, &m);
        if (r != OK)
                return r;
-       return m.SHMGET_RETID;
+       return m.m_lc_ipc_shmget.retid;
 }
index 32696530d13c82c24eb62fe74c4927f16a61b7eb..d213301a1abe8091a45273cbf6c080f7f623fd48 100644 (file)
@@ -42,9 +42,9 @@ int do_shmget(message *m)
        int flag;
        int id;
 
-       key = m->SHMGET_KEY;
-       old_size = size = m->SHMGET_SIZE;
-       flag = m->SHMGET_FLAG;
+       key = m->m_lc_ipc_shmget.key;
+       old_size = size = m->m_lc_ipc_shmget.size;
+       flag = m->m_lc_ipc_shmget.flag;
 
        if ((shm = shm_find_key(key))) {
                if (!check_perm(&shm->shmid_ds.shm_perm, who_e, flag))
@@ -97,7 +97,7 @@ int do_shmget(message *m)
                shm_list_nr++;
        }
 
-       m->SHMGET_RETID = id;
+       m->m_lc_ipc_shmget.retid = id;
        return OK;
 }