]> Zhao Yanbai Git Server - minix.git/commitdiff
Message type for VFS_CREAT
authorLionel Sambuc <lionel@minix3.org>
Mon, 12 May 2014 14:42:43 +0000 (16:42 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:33 +0000 (17:05 +0200)
Change-Id: Ica111f1b2005a6ff42dc3bb59ac3158a2e12678c

include/minix/callnr.h
include/minix/ipc.h
lib/libc/sys-minix/open.c
servers/vfs/open.c

index 565a4ed236192da3b9058f84cc2b4c3a648ccd71..06330767ed1103005d5623f3e4214990f9917301 100644 (file)
 
 #define NR_VFS_CALLS           49      /* highest number from base plus one */
 
-/* Field names for the creat(2) call. */
-#define VFS_CREAT_NAME         m1_p1   /* const char * */
-#define VFS_CREAT_LEN          m1_i1   /* size_t */
-#define VFS_CREAT_FLAGS                m1_i2   /* int */
-#define VFS_CREAT_MODE         m1_i3   /* mode_t */
-
 /* Field names for the chown(2) and fchown(2) calls. */
 #define VFS_CHOWN_NAME         m1_p1   /* const char * */
 #define VFS_CHOWN_LEN          m1_i1   /* size_t */
index 0f5dffe24ad5951014ef72f5836e1ce1dfb5ca6c..03225e0667e03db5306de9e4958a6987185a9ab3 100644 (file)
@@ -145,6 +145,16 @@ typedef struct {
 } mess_sigcalls;
 _ASSERT_MSG_SIZE(mess_sigcalls);
 
+typedef struct {
+       vir_bytes name;
+       size_t len;
+       int flags;
+       mode_t mode;
+
+       uint8_t padding[40];
+} mess_lc_vfs_creat;
+_ASSERT_MSG_SIZE(mess_lc_vfs_creat);
+
 typedef struct {
        int fd;
        int cmd;
@@ -806,6 +816,7 @@ typedef struct {
                mess_fs_vfs_readsuper   m_fs_vfs_readsuper;
                mess_fs_vfs_readwrite   m_fs_vfs_readwrite;
 
+               mess_lc_vfs_creat       m_lc_vfs_creat;
                mess_lc_vfs_fcntl       m_lc_vfs_fcntl;
                mess_lc_vfs_fstat       m_lc_vfs_fstat;
                mess_lc_vfs_fsync       m_lc_vfs_fsync;
index 7f5a6dd7e1c075b22fbde66c0c6d2e8d3df3bc73..baafbd606c149ec20a07088c53230d5473b52030 100644 (file)
@@ -18,10 +18,10 @@ int open(const char *name, int flags, ...)
    * and therefore a different call number as well.
    */
   if (flags & O_CREAT) {
-       m.VFS_CREAT_LEN = strlen(name) + 1;
-       m.VFS_CREAT_FLAGS = flags;
-       m.VFS_CREAT_MODE = va_arg(argp, int);
-       m.VFS_CREAT_NAME = (char *) __UNCONST(name);
+       m.m_lc_vfs_creat.len = strlen(name) + 1;
+       m.m_lc_vfs_creat.flags = flags;
+       m.m_lc_vfs_creat.mode = va_arg(argp, mode_t);
+       m.m_lc_vfs_creat.name = (vir_bytes)name;
        call = VFS_CREAT;
   } else {
        _loadname(name, &m);
index e60608d7cfdbaae68216396b70dc6bca676c8cd2..205de3c278862369b41a8e2d56a47568c00dd9b0 100644 (file)
@@ -64,10 +64,10 @@ int do_creat(void)
   vir_bytes vname;
   size_t vname_length;
 
-  vname = (vir_bytes) job_m_in.VFS_CREAT_NAME;
-  vname_length = (size_t) job_m_in.VFS_CREAT_LEN;
-  open_flags = job_m_in.VFS_CREAT_FLAGS;
-  create_mode = job_m_in.VFS_CREAT_MODE;
+  vname = job_m_in.m_lc_vfs_creat.name;
+  vname_length = job_m_in.m_lc_vfs_creat.len;
+  open_flags = job_m_in.m_lc_vfs_creat.flags;
+  create_mode = job_m_in.m_lc_vfs_creat.mode;
 
   if (!(open_flags & O_CREAT))
        return(EINVAL);