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

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

index 3063c8e9ffb38947bc216418c30a69ad8940bb03..c70f2e2574798d6982247d54265858df1e529714 100644 (file)
 
 #define NR_VFS_CALLS           49      /* highest number from base plus one */
 
-/* Field names for the mount(2) call. */
-#define VFS_MOUNT_FLAGS                m11_i1  /* int */
-#define VFS_MOUNT_DEVLEN       m11_s1  /* size_t */
-#define VFS_MOUNT_PATHLEN      m11_s2  /* size_t */
-#define VFS_MOUNT_TYPELEN      m11_s3  /* size_t */
-#define VFS_MOUNT_LABELLEN     m11_s4  /* size_t */
-#define VFS_MOUNT_DEV          m11_p1  /* char * */
-#define VFS_MOUNT_PATH         m11_p2  /* char * */
-#define VFS_MOUNT_TYPE         m11_p3  /* char * */
-#define VFS_MOUNT_LABEL                m11_p4  /* char * */
-
 /* Field names for the umount(2) call. */
 #define VFS_UMOUNT_NAME                m1_p1   /* char * */
 #define VFS_UMOUNT_NAMELEN     m1_i1   /* size_t */
index 4cce078ed12c24a182721f6fb4ab8feede159bb9..8d53d647c5ec515f5c2666abde8802fa5e12f6e0 100644 (file)
@@ -155,6 +155,21 @@ typedef struct {
 } mess_lc_vfs_getvfsstat;
 _ASSERT_MSG_SIZE(mess_lc_vfs_getvfsstat);
 
+typedef struct {
+       int flags;
+       size_t devlen;
+       size_t pathlen;
+       size_t typelen;
+       size_t labellen;
+       vir_bytes dev;
+       vir_bytes path;
+       vir_bytes type;
+       vir_bytes label;
+
+       uint8_t padding[20];
+} mess_lc_vfs_mount;
+_ASSERT_MSG_SIZE(mess_lc_vfs_mount);
+
 typedef struct {
        uint32_t nfds;
        fd_set *readfds;
@@ -629,6 +644,7 @@ typedef struct {
                mess_fs_vfs_readwrite   m_fs_vfs_readwrite;
 
                mess_lc_vfs_getvfsstat  m_lc_vfs_getvfsstat;
+               mess_lc_vfs_mount       m_lc_vfs_mount;
                mess_lc_vfs_select      m_lc_vfs_select;
                mess_lc_vfs_statvfs1    m_lc_vfs_statvfs1;
 
index 3f942b74482e22a50259e830f863359508229ca0..1a2dd69027820b34cc7b961fcfdf3c35989ce1e2 100644 (file)
@@ -144,15 +144,15 @@ int minix_mount(char *special, char *name, int mountflags, int srvflags,
   
   /* Now perform mount(). */
   memset(&m, 0, sizeof(m));
-  m.VFS_MOUNT_FLAGS = mountflags;
-  m.VFS_MOUNT_DEVLEN = special ? strlen(special) + 1 : 0;
-  m.VFS_MOUNT_PATHLEN = strlen(name) + 1;
-  m.VFS_MOUNT_TYPELEN = strlen(type) + 1;
-  m.VFS_MOUNT_LABELLEN = strlen(label) + 1;
-  m.VFS_MOUNT_DEV = special;
-  m.VFS_MOUNT_PATH = name;
-  m.VFS_MOUNT_TYPE = type;
-  m.VFS_MOUNT_LABEL = label;
+  m.m_lc_vfs_mount.flags = mountflags;
+  m.m_lc_vfs_mount.devlen = special ? strlen(special) + 1 : 0;
+  m.m_lc_vfs_mount.pathlen = strlen(name) + 1;
+  m.m_lc_vfs_mount.typelen = strlen(type) + 1;
+  m.m_lc_vfs_mount.labellen = strlen(label) + 1;
+  m.m_lc_vfs_mount.dev = (vir_bytes)special;
+  m.m_lc_vfs_mount.path = (vir_bytes)name;
+  m.m_lc_vfs_mount.type = (vir_bytes)type;
+  m.m_lc_vfs_mount.label = (vir_bytes)label;
   r = _syscall(VFS_PROC_NR, VFS_MOUNT, &m);
 
   if (r != OK && !use_existing) {
index 6d8ef411c3d31d31399b586ee9711a57606d33dd..59ddf547e819b4da3104d09cdfa26a1fe4ccacbb 100644 (file)
@@ -93,15 +93,15 @@ int do_mount(void)
   vir_bytes label, type, vname1, vname2;
   size_t vname1_length, vname2_length, label_len, type_len;
 
-  mflags = job_m_in.VFS_MOUNT_FLAGS;
-  label = (vir_bytes) job_m_in.VFS_MOUNT_LABEL;
-  label_len = (size_t) job_m_in.VFS_MOUNT_LABELLEN;
-  vname1 = (vir_bytes) job_m_in.VFS_MOUNT_DEV;
-  vname1_length = (size_t) job_m_in.VFS_MOUNT_DEVLEN;
-  vname2 = (vir_bytes) job_m_in.VFS_MOUNT_PATH;
-  vname2_length = (size_t) job_m_in.VFS_MOUNT_PATHLEN;
-  type = (vir_bytes) job_m_in.VFS_MOUNT_TYPE;
-  type_len = (size_t) job_m_in.VFS_MOUNT_TYPELEN;
+  mflags = job_m_in.m_lc_vfs_mount.flags;
+  label = job_m_in.m_lc_vfs_mount.label;
+  label_len = job_m_in.m_lc_vfs_mount.labellen;
+  vname1 = job_m_in.m_lc_vfs_mount.dev;
+  vname1_length = job_m_in.m_lc_vfs_mount.devlen;
+  vname2 = job_m_in.m_lc_vfs_mount.path;
+  vname2_length = job_m_in.m_lc_vfs_mount.pathlen;
+  type = job_m_in.m_lc_vfs_mount.type;
+  type_len = job_m_in.m_lc_vfs_mount.typelen;
 
   /* Only the super-user may do MOUNT. */
   if (!super_user) return(EPERM);