]> Zhao Yanbai Git Server - minix.git/commitdiff
Message types for VFS chmod
authorLionel Sambuc <lionel@minix3.org>
Wed, 30 Apr 2014 18:37:50 +0000 (20:37 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:29 +0000 (17:05 +0200)
Change-Id: I76e5df4c0a386682e863e640182c59e4ab7e30be

include/minix/ipc.h
lib/libpuffs/protect.c
lib/libsffs/stat.c
servers/ext2/protect.c
servers/mfs/protect.c
servers/pfs/misc.c
servers/vfs/request.c

index 8c6c93291fef4c35f678b01f298ce3ff0296fa54..36420c9c7ba1c4739777c75635e454903f9717a1 100644 (file)
@@ -146,6 +146,22 @@ typedef struct {
 } mess_sigcalls;
 _ASSERT_MSG_SIZE(mess_sigcalls);
 
+typedef struct {
+       ino_t inode;
+
+       mode_t mode;
+
+       uint8_t data[44];
+} mess_vfs_fs_chmod;
+_ASSERT_MSG_SIZE(mess_vfs_fs_chmod);
+
+typedef struct {
+       mode_t mode;
+
+       uint8_t data[52];
+} mess_fs_vfs_chmod;
+_ASSERT_MSG_SIZE(mess_fs_vfs_chmod);
+
 typedef struct {
        ino_t inode;
 
@@ -507,6 +523,8 @@ typedef struct {
        mess_sigcalls m_sigcalls;
        mess_vfs_fs_newnode m_vfs_fs_newnode;
        mess_fs_vfs_newnode m_fs_vfs_newnode;
+       mess_vfs_fs_chmod m_vfs_fs_chmod;
+       mess_fs_vfs_chmod m_fs_vfs_chmod;
        mess_vfs_fs_create m_vfs_fs_create;
        mess_fs_vfs_create m_fs_vfs_create;
        mess_vfs_fs_flush m_vfs_fs_flush;
index 6cf79360f57c51241170eb07380243eb354982d4..f75fea50d37e9ef7be30fbd21449388c9fd8da64 100644 (file)
@@ -25,9 +25,9 @@ int fs_chmod(void)
   if (global_pu->pu_ops.puffs_node_setattr == NULL)
        return(EINVAL);
 
-  mode = (mode_t) fs_m_in.REQ_MODE;
+  mode = fs_m_in.m_vfs_fs_chmod.mode;
 
-  if ((pn = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.REQ_INODE_NR)) == NULL)
+  if ((pn = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.m_vfs_fs_chmod.inode)) == NULL)
        return(EINVAL);
    
   puffs_vattr_null(&va);
@@ -39,7 +39,7 @@ int fs_chmod(void)
        return(EINVAL);
 
   /* Return full new mode to caller. */
-  fs_m_out.RES_MODE = pn->pn_va.va_mode;
+  fs_m_out.m_fs_vfs_chmod.mode = pn->pn_va.va_mode;
 
   return(OK);
 }
index 997027873655ca6b1480bd81e19945db9d719762..f4d5225d0473803ebda99c47580bddf4c91ebaa0 100644 (file)
@@ -110,7 +110,7 @@ int do_chmod(void)
   if (state.s_read_only)
        return EROFS;
 
-  if ((ino = find_inode(m_in.REQ_INODE_NR)) == NULL)
+  if ((ino = find_inode(m_in.m_vfs_fs_chmod.inode)) == NULL)
        return EINVAL;
 
   if ((r = verify_inode(ino, path, NULL)) != OK)
@@ -118,7 +118,7 @@ int do_chmod(void)
 
   /* Set the new file mode. */
   attr.a_mask = SFFS_ATTR_MODE;
-  attr.a_mode = m_in.REQ_MODE; /* no need to convert in this direction */
+  attr.a_mode = m_in.m_vfs_fs_chmod.mode; /* no need to convert in this direction */
 
   if ((r = sffs_table->t_setattr(path, &attr)) != OK)
        return r;
@@ -127,7 +127,7 @@ int do_chmod(void)
   if ((r = verify_path(path, ino, &attr, NULL)) != OK)
        return r;
 
-  m_out.RES_MODE = get_mode(ino, attr.a_mode);
+  m_out.m_fs_vfs_chmod.mode = get_mode(ino, attr.a_mode);
 
   return OK;
 }
index dc102a61c918b93d7a375172ab2f46e998c3b81d..436e9d23c3a9a74a9f0e31634676c236856fd31e 100644 (file)
@@ -20,10 +20,10 @@ int fs_chmod()
   register struct inode *rip;
   pmode_t mode;
 
-  mode = (pmode_t) fs_m_in.REQ_MODE;
+  mode = fs_m_in.m_vfs_fs_chmod.mode;
 
   /* Temporarily open the file. */
-  if( (rip = get_inode(fs_dev, (pino_t) fs_m_in.REQ_INODE_NR)) == NULL)
+  if( (rip = get_inode(fs_dev, fs_m_in.m_vfs_fs_chmod.inode)) == NULL)
          return(EINVAL);
 
   /* Now make the change. Clear setgid bit if file is not in caller's grp */
@@ -32,7 +32,7 @@ int fs_chmod()
   rip->i_dirt = IN_DIRTY;
 
   /* Return full new mode to caller. */
-  fs_m_out.RES_MODE = rip->i_mode;
+  fs_m_out.m_fs_vfs_chmod.mode = rip->i_mode;
 
   put_inode(rip);
   return(OK);
index 9f85b2da5cdd1cd8d582a7324b2fecdd33eebd4f..85826e2d595d4bd694336b034ad7b4b9ae4dad48 100644 (file)
@@ -16,10 +16,10 @@ int fs_chmod()
   register struct inode *rip;
   pmode_t mode;
 
-  mode = (pmode_t) fs_m_in.REQ_MODE;
+  mode = fs_m_in.m_vfs_fs_chmod.mode;
   
   /* Temporarily open the file. */
-  if( (rip = get_inode(fs_dev, (pino_t) fs_m_in.REQ_INODE_NR)) == NULL)
+  if( (rip = get_inode(fs_dev, fs_m_in.m_vfs_fs_chmod.inode)) == NULL)
          return(EINVAL);
  
   if(rip->i_sp->s_rd_only) {
@@ -33,7 +33,7 @@ int fs_chmod()
   IN_MARKDIRTY(rip);
 
   /* Return full new mode to caller. */
-  fs_m_out.RES_MODE = rip->i_mode;
+  fs_m_out.m_fs_vfs_chmod.mode = rip->i_mode;
 
   put_inode(rip);
   return(OK);
index 296e46fdbf0d6aa70b50ea5dbb772cdc9c057497..0ba9b7c067d8df0235531f720c0e72f79033ad51 100644 (file)
@@ -18,9 +18,9 @@ int fs_sync(message *fs_m_in, message *fs_m_out)
 int fs_chmod(message *fs_m_in, message *fs_m_out)
 {
   struct inode *rip;  /* target inode */
-  mode_t mode = (mode_t) fs_m_in->REQ_MODE;
+  mode_t mode = fs_m_in->m_vfs_fs_chmod.mode;
 
-  if( (rip = find_inode(fs_m_in->REQ_INODE_NR)) == NULL) return(EINVAL);
+  if( (rip = find_inode(fs_m_in->m_vfs_fs_chmod.inode)) == NULL) return(EINVAL);
   get_inode(rip->i_dev, rip->i_num);   /* mark inode in use */
   rip->i_mode = (rip->i_mode & ~ALL_MODES) | (mode & ALL_MODES);
   put_inode(rip);                      /* release the inode */
index f2b350304bb7566a5445e4326f406f454e5f417c..81c6b5c0459b276180713f7a7639d0da1e809d10 100644 (file)
@@ -115,14 +115,14 @@ int req_chmod(
 
   /* Fill in request message */
   m.m_type = REQ_CHMOD;
-  m.REQ_INODE_NR = (pino_t) inode_nr;
-  m.REQ_MODE = (pmode_t) rmode;
+  m.m_vfs_fs_chmod.inode = inode_nr;
+  m.m_vfs_fs_chmod.mode = rmode;
 
   /* Send/rec request */
   r = fs_sendrec(fs_e, &m);
 
   /* Copy back actual mode. */
-  *new_modep = (mode_t) m.RES_MODE;
+  *new_modep = m.m_fs_vfs_chmod.mode;
 
   return(r);
 }