]> Zhao Yanbai Git Server - minix.git/commitdiff
Message type for VFS_{,F}CHOWN
authorLionel Sambuc <lionel@minix3.org>
Mon, 12 May 2014 14:48:10 +0000 (16:48 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:34 +0000 (17:05 +0200)
Change-Id: Ieb8cef45bfab1e35ad8854038c72b59a4d7bbaad

include/minix/callnr.h
include/minix/ipc.h
lib/libc/sys-minix/chown.c
lib/libc/sys-minix/fchown.c
servers/vfs/protect.c

index 06330767ed1103005d5623f3e4214990f9917301..b847bf96b68bfe3b855602c2c28533b1286cd419 100644 (file)
 
 #define NR_VFS_CALLS           49      /* highest number from base plus one */
 
-/* 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 */
-#define VFS_CHOWN_FD           m1_i1   /* int */
-#define VFS_CHOWN_OWNER                m1_i2   /* uid_t */
-#define VFS_CHOWN_GROUP                m1_i3   /* gid_t */
-
 /* Field names for the fchdir(2) call. */
 #define VFS_FCHDIR_FD          m1_i1   /* int */
 
index 03225e0667e03db5306de9e4958a6987185a9ab3..d4ba5793d6688f4d36fdc6b333f68b08c9d47439 100644 (file)
@@ -145,6 +145,17 @@ typedef struct {
 } mess_sigcalls;
 _ASSERT_MSG_SIZE(mess_sigcalls);
 
+typedef struct {
+       vir_bytes name;
+       size_t len;
+       int fd;
+       uid_t owner;
+       gid_t group;
+
+       uint8_t padding[36];
+} mess_lc_vfs_chown;
+_ASSERT_MSG_SIZE(mess_lc_vfs_chown);
+
 typedef struct {
        vir_bytes name;
        size_t len;
@@ -816,6 +827,7 @@ typedef struct {
                mess_fs_vfs_readsuper   m_fs_vfs_readsuper;
                mess_fs_vfs_readwrite   m_fs_vfs_readwrite;
 
+               mess_lc_vfs_chown       m_lc_vfs_chown;
                mess_lc_vfs_creat       m_lc_vfs_creat;
                mess_lc_vfs_fcntl       m_lc_vfs_fcntl;
                mess_lc_vfs_fstat       m_lc_vfs_fstat;
index b0505971a20b3b1997cb5edc15dac6d9360801b7..fd4c26797263e2413457f5eeb27122a5070399d4 100644 (file)
@@ -14,9 +14,9 @@ int chown(const char *name, uid_t owner, gid_t grp)
   message m;
 
   memset(&m, 0, sizeof(m));
-  m.VFS_CHOWN_LEN = strlen(name) + 1;
-  m.VFS_CHOWN_OWNER = owner;
-  m.VFS_CHOWN_GROUP = grp;
-  m.VFS_CHOWN_NAME = (char *) __UNCONST(name);
+  m.m_lc_vfs_chown.len = strlen(name) + 1;
+  m.m_lc_vfs_chown.owner = owner;
+  m.m_lc_vfs_chown.group = grp;
+  m.m_lc_vfs_chown.name = (vir_bytes)name;
   return(_syscall(VFS_PROC_NR, VFS_CHOWN, &m));
 }
index b49601c858fd5278ec18e0c60c1e9f063da539b4..19db6dd3a2d9eeb261747eee9d9cb39914b2d685 100644 (file)
@@ -14,8 +14,8 @@ int fchown(int fd, uid_t owner, gid_t grp)
   message m;
 
   memset(&m, 0, sizeof(m));
-  m.VFS_CHOWN_FD = fd;
-  m.VFS_CHOWN_OWNER = owner;
-  m.VFS_CHOWN_GROUP = grp;
+  m.m_lc_vfs_chown.fd = fd;
+  m.m_lc_vfs_chown.owner = owner;
+  m.m_lc_vfs_chown.group = grp;
   return(_syscall(VFS_PROC_NR, VFS_FCHOWN, &m));
 }
index 98b20dbf113dc6b7df3ef772ce9275d773c80965..7bee28a7fc7225c82da1d92236b0f38863f2cd38 100644 (file)
@@ -112,12 +112,12 @@ int do_chown(void)
   size_t vname1_length;
 
   flp = NULL;
-  uid = job_m_in.VFS_CHOWN_OWNER;
-  gid = job_m_in.VFS_CHOWN_GROUP;
+  uid = job_m_in.m_lc_vfs_chown.owner;
+  gid = job_m_in.m_lc_vfs_chown.group;
 
   if (job_call_nr == VFS_CHOWN) {
-       vname1 = (vir_bytes) job_m_in.VFS_CHOWN_NAME;
-       vname1_length = (size_t) job_m_in.VFS_CHOWN_LEN;
+       vname1 = job_m_in.m_lc_vfs_chown.name;
+       vname1_length = job_m_in.m_lc_vfs_chown.len;
 
        lookup_init(&resolve, fullpath, PATH_NOFLAGS, &vmp, &vp);
        resolve.l_vmnt_lock = VMNT_READ;
@@ -128,7 +128,7 @@ int do_chown(void)
                return(err_code);
        if ((vp = eat_path(&resolve, fp)) == NULL) return(err_code);
   } else {     /* call_nr == VFS_FCHOWN */
-       rfd = job_m_in.VFS_CHOWN_FD;
+       rfd = job_m_in.m_lc_vfs_chown.fd;
 
        /* File is already opened; get a pointer to the vnode from filp. */
        if ((flp = get_filp(rfd, VNODE_WRITE)) == NULL)