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

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

index 500465c46c408a8e31cd96c036a3bfa6e899826b..395ea7979b1ebe0503474f963309c7bdedc5e840 100644 (file)
 
 #define NR_VFS_CALLS           49      /* highest number from base plus one */
 
-/* Field names for the readlink(2) call. */
-#define VFS_READLINK_NAME      m1_p1   /* const char * */
-#define VFS_READLINK_NAMELEN   m1_i1   /* size_t */
-#define VFS_READLINK_BUF       m1_p2   /* char * */
-#define VFS_READLINK_BUFSIZE   m1_i2   /* size_t */
-
 /* Field names for the stat(2) and lstat(2) calls. */
 #define VFS_STAT_NAME          m1_p1   /* const char * */
 #define VFS_STAT_LEN           m1_i1   /* size_t */
index 55bdf2396b23ec207f99b69316e5a42f69510714..c7cf01e98cc7c04cff1a31e512bc42802345de41 100644 (file)
@@ -222,6 +222,16 @@ typedef struct {
 } mess_lc_vfs_pipe2;
 _ASSERT_MSG_SIZE(mess_lc_vfs_pipe2);
 
+typedef struct {
+       vir_bytes name;         /* const char * */
+       size_t namelen;
+       vir_bytes buf;
+       size_t bufsize;
+
+       uint8_t padding[40];
+} mess_lc_vfs_readlink;
+_ASSERT_MSG_SIZE(mess_lc_vfs_readlink);
+
 typedef struct {
        uint32_t nfds;
        fd_set *readfds;
@@ -757,6 +767,7 @@ typedef struct {
                mess_lc_vfs_lseek       m_lc_vfs_lseek;
                mess_lc_vfs_mount       m_lc_vfs_mount;
                mess_lc_vfs_pipe2       m_lc_vfs_pipe2;
+               mess_lc_vfs_readlink    m_lc_vfs_readlink;
                mess_lc_vfs_select      m_lc_vfs_select;
                mess_lc_vfs_statvfs1    m_lc_vfs_statvfs1;
                mess_lc_vfs_truncate    m_lc_vfs_truncate;
index 41f423f33bc880bc33e57c1bf31b60e1cfc30d4e..a7b80cea18d5f2f76f8f525c96fcf3431fd93a11 100644 (file)
@@ -14,10 +14,10 @@ ssize_t readlink(const char *name, char *buffer, size_t bufsiz)
   message m;
 
   memset(&m, 0, sizeof(m));
-  m.VFS_READLINK_NAMELEN = strlen(name) + 1;
-  m.VFS_READLINK_BUFSIZE = bufsiz;
-  m.VFS_READLINK_NAME = (char *) __UNCONST(name);
-  m.VFS_READLINK_BUF = (char *) buffer;
+  m.m_lc_vfs_readlink.namelen = strlen(name) + 1;
+  m.m_lc_vfs_readlink.bufsize = bufsiz;
+  m.m_lc_vfs_readlink.name = (vir_bytes)name;
+  m.m_lc_vfs_readlink.buf = (vir_bytes)buffer;
 
   return(_syscall(VFS_PROC_NR, VFS_READLINK, &m));
 }
index 63f6a9b9941c5f842c7f0a4fd2b04fd5b540f84f..d4aed5128fc90a08a006adb19f7ad9e23001682d 100644 (file)
@@ -480,10 +480,10 @@ int do_rdlink(void)
   size_t vname_length, buf_size;
   vir_bytes buf;
 
-  vname = (vir_bytes) job_m_in.VFS_READLINK_NAME;
-  vname_length = job_m_in.VFS_READLINK_NAMELEN;
-  buf = (vir_bytes) job_m_in.VFS_READLINK_BUF;
-  buf_size = (size_t) job_m_in.VFS_READLINK_BUFSIZE;
+  vname = job_m_in.m_lc_vfs_readlink.name;
+  vname_length = job_m_in.m_lc_vfs_readlink.namelen;
+  buf = job_m_in.m_lc_vfs_readlink.buf;
+  buf_size = job_m_in.m_lc_vfs_readlink.bufsize;
   if (buf_size > SSIZE_MAX) return(EINVAL);
 
   lookup_init(&resolve, fullpath, PATH_RET_SYMLINK, &vmp, &vp);