]> Zhao Yanbai Git Server - minix.git/commitdiff
Message type for VFS_{LINK,SYMLINK,RENAME}
authorLionel Sambuc <lionel@minix3.org>
Mon, 12 May 2014 11:47:18 +0000 (13:47 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:32 +0000 (17:05 +0200)
Change-Id: If4569bac4584e053b7c4816fe47338327175fd44

include/minix/callnr.h
include/minix/ipc.h
lib/libc/sys-minix/link.c
lib/libc/sys-minix/rename.c
lib/libc/sys-minix/symlink.c
servers/vfs/link.c

index ad6c92af6a3ee23a909bd95079a962f8af3b55ac..500465c46c408a8e31cd96c036a3bfa6e899826b 100644 (file)
 
 #define NR_VFS_CALLS           49      /* highest number from base plus one */
 
-/* Field names for the link(2), symlink(2), and rename(2) call. */
-#define VFS_LINK_NAME1         m1_p1   /* const char * */
-#define VFS_LINK_LEN1          m1_i1   /* size_t */
-#define VFS_LINK_NAME2         m1_p2   /* const char * */
-#define VFS_LINK_LEN2          m1_i2   /* size_t */
-
 /* Field names for the readlink(2) call. */
 #define VFS_READLINK_NAME      m1_p1   /* const char * */
 #define VFS_READLINK_NAMELEN   m1_i1   /* size_t */
index 2228bf79e39cb220407c4b9701789a86d57ca067..55bdf2396b23ec207f99b69316e5a42f69510714 100644 (file)
@@ -171,6 +171,16 @@ typedef struct {
 } mess_lc_vfs_ioctl;
 _ASSERT_MSG_SIZE(mess_lc_vfs_ioctl);
 
+typedef struct {
+       vir_bytes name1;
+       vir_bytes name2;
+       size_t len1;
+       size_t len2;
+
+       uint8_t padding[40];
+} mess_lc_vfs_link;
+_ASSERT_MSG_SIZE(mess_lc_vfs_link);
+
 typedef struct {
        off_t offset;
 
@@ -743,6 +753,7 @@ typedef struct {
                mess_lc_vfs_fsync       m_lc_vfs_fsync;
                mess_lc_vfs_getvfsstat  m_lc_vfs_getvfsstat;
                mess_lc_vfs_ioctl       m_lc_vfs_ioctl;
+               mess_lc_vfs_link        m_lc_vfs_link;
                mess_lc_vfs_lseek       m_lc_vfs_lseek;
                mess_lc_vfs_mount       m_lc_vfs_mount;
                mess_lc_vfs_pipe2       m_lc_vfs_pipe2;
index f9a29cd7b2048ce7f1f302b93bbe20eb9e51d048..c66b1a63a8e23cce90107d9e79ed20a80ce19c82 100644 (file)
@@ -10,9 +10,9 @@ int link(const char *name, const char *name2)
   message m;
 
   memset(&m, 0, sizeof(m));
-  m.VFS_LINK_LEN1 = strlen(name) + 1;
-  m.VFS_LINK_LEN2 = strlen(name2) + 1;
-  m.VFS_LINK_NAME1 = (char *) __UNCONST(name);
-  m.VFS_LINK_NAME2 = (char *) __UNCONST(name2);
+  m.m_lc_vfs_link.len1 = strlen(name) + 1;
+  m.m_lc_vfs_link.len2 = strlen(name2) + 1;
+  m.m_lc_vfs_link.name1 = (vir_bytes)name;
+  m.m_lc_vfs_link.name2 = (vir_bytes)name2;
   return(_syscall(VFS_PROC_NR, VFS_LINK, &m));
 }
index 49847684c9b259ce569dfbba4118089eef11cb35..d0438b9150d3a412a458a30667c3d6a2f257c44b 100644 (file)
@@ -14,9 +14,9 @@ int rename(const char *name, const char *name2)
   message m;
 
   memset(&m, 0, sizeof(m));
-  m.VFS_LINK_LEN1 = strlen(name) + 1;
-  m.VFS_LINK_LEN2 = strlen(name2) + 1;
-  m.VFS_LINK_NAME1 = (char *) __UNCONST(name);
-  m.VFS_LINK_NAME2 = (char *) __UNCONST(name2);
+  m.m_lc_vfs_link.len1 = strlen(name) + 1;
+  m.m_lc_vfs_link.len2 = strlen(name2) + 1;
+  m.m_lc_vfs_link.name1 = (vir_bytes)name;
+  m.m_lc_vfs_link.name2 = (vir_bytes)name2;
   return(_syscall(VFS_PROC_NR, VFS_RENAME, &m));
 }
index 021084e299dcbb8c26980c6a257b56b5e57e0f86..3a471a1669d3a484b11a650778edb0a234002f21 100644 (file)
@@ -10,9 +10,9 @@ int symlink(const char *name, const char *name2)
   message m;
 
   memset(&m, 0, sizeof(m));
-  m.VFS_LINK_LEN1 = strlen(name) + 1;
-  m.VFS_LINK_LEN2 = strlen(name2) + 1;
-  m.VFS_LINK_NAME1 = (char *) __UNCONST(name);
-  m.VFS_LINK_NAME2 = (char *) __UNCONST(name2);
+  m.m_lc_vfs_link.len1 = strlen(name) + 1;
+  m.m_lc_vfs_link.len2 = strlen(name2) + 1;
+  m.m_lc_vfs_link.name1 = (vir_bytes)name;
+  m.m_lc_vfs_link.name2 = (vir_bytes)name2;
   return(_syscall(VFS_PROC_NR, VFS_SYMLINK, &m));
 }
index c69a67a5cd694736bafbecd3661a33b49451c766..63f6a9b9941c5f842c7f0a4fd2b04fd5b540f84f 100644 (file)
@@ -38,10 +38,10 @@ int do_link(void)
   vir_bytes vname1, vname2;
   size_t vname1_length, vname2_length;
 
-  vname1 = (vir_bytes) job_m_in.VFS_LINK_NAME1;
-  vname1_length = job_m_in.VFS_LINK_LEN1;
-  vname2 = (vir_bytes) job_m_in.VFS_LINK_NAME2;
-  vname2_length = job_m_in.VFS_LINK_LEN2;
+  vname1 = job_m_in.m_lc_vfs_link.name1;
+  vname1_length = job_m_in.m_lc_vfs_link.len1;
+  vname2 = job_m_in.m_lc_vfs_link.name2;
+  vname2_length = job_m_in.m_lc_vfs_link.len2;
 
   lookup_init(&resolve, fullpath, PATH_NOFLAGS, &vmp1, &vp);
   resolve.l_vmnt_lock = VMNT_WRITE;
@@ -179,10 +179,10 @@ int do_rename(void)
   vir_bytes vname1, vname2;
   size_t vname1_length, vname2_length;
 
-  vname1 = (vir_bytes) job_m_in.VFS_LINK_NAME1;
-  vname1_length = job_m_in.VFS_LINK_LEN1;
-  vname2 = (vir_bytes) job_m_in.VFS_LINK_NAME2;
-  vname2_length = job_m_in.VFS_LINK_LEN2;
+  vname1 = job_m_in.m_lc_vfs_link.name1;
+  vname1_length = job_m_in.m_lc_vfs_link.len1;
+  vname2 = job_m_in.m_lc_vfs_link.name2;
+  vname2_length = job_m_in.m_lc_vfs_link.len2;
 
   lookup_init(&resolve, fullpath, PATH_RET_SYMLINK, &oldvmp, &old_dirp);
   /* Do not yet request exclusive lock on vmnt to prevent deadlocks later on */
@@ -401,10 +401,10 @@ int do_slink(void)
   resolve.l_vmnt_lock = VMNT_WRITE;
   resolve.l_vnode_lock = VNODE_WRITE;
 
-  vname1 = (vir_bytes) job_m_in.VFS_LINK_NAME1;
-  vname1_length = job_m_in.VFS_LINK_LEN1;
-  vname2 = (vir_bytes) job_m_in.VFS_LINK_NAME2;
-  vname2_length = job_m_in.VFS_LINK_LEN2;
+  vname1 = job_m_in.m_lc_vfs_link.name1;
+  vname1_length = job_m_in.m_lc_vfs_link.len1;
+  vname2 = job_m_in.m_lc_vfs_link.name2;
+  vname2_length = job_m_in.m_lc_vfs_link.len2;
 
   if (vname1_length <= 1) return(ENOENT);
   if (vname1_length >= _POSIX_SYMLINK_MAX) return(ENAMETOOLONG);