[glib/wip/msanchez/libmount: 126/129] Refactor common code into create_unix_mount_entry ()



commit c1a2830a1d2532e49c68b49f2b7d5c34765629eb
Author: Mario Sanchez Prada <mario endlessm com>
Date:   Tue Jul 19 13:31:09 2016 +0100

    Refactor common code into create_unix_mount_entry ()
    
    https://bugzilla.gnome.org/show_bug.cgi?id=522053

 gio/gunixmounts.c |   93 ++++++++++++++++++++++------------------------------
 1 files changed, 39 insertions(+), 54 deletions(-)
---
diff --git a/gio/gunixmounts.c b/gio/gunixmounts.c
index 7bbaa58..5566db8 100644
--- a/gio/gunixmounts.c
+++ b/gio/gunixmounts.c
@@ -459,6 +459,9 @@ _g_get_unix_mounts (void)
   while ((mntent = getmntent (file)) != NULL)
 #endif
     {
+      const char *device_path = NULL;
+      gboolean is_read_only = FALSE;
+
       /* ignore any mnt_fsname that is repeated and begins with a '/'
        *
        * We do this to avoid being fooled by --bind mounts, since
@@ -473,29 +476,26 @@ _g_get_unix_mounts (void)
          mntent->mnt_fsname[0] == '/' &&
          g_hash_table_lookup (mounts_hash, mntent->mnt_fsname))
         continue;
-      
-      mount_entry = g_new0 (GUnixMountEntry, 1);
-      mount_entry->mount_path = g_strdup (mntent->mnt_dir);
+
       if (g_strcmp0 (mntent->mnt_fsname, "/dev/root") == 0)
-        mount_entry->device_path = g_strdup (_resolve_dev_root ());
+        device_path = _resolve_dev_root ();
       else
-        mount_entry->device_path = g_strdup (mntent->mnt_fsname);
-      mount_entry->filesystem_type = g_strdup (mntent->mnt_type);
-      
+        device_path = mntent->mnt_fsname;
+
 #if defined (HAVE_HASMNTOPT)
       if (hasmntopt (mntent, MNTOPT_RO) != NULL)
-       mount_entry->is_read_only = TRUE;
+       is_read_only = TRUE;
 #endif
-      
-      mount_entry->is_system_internal =
-       guess_system_internal (mount_entry->mount_path,
-                              mount_entry->filesystem_type,
-                              mount_entry->device_path);
-      
+
+      mount_entry = create_unix_mount_entry (device_path,
+                                             mntent->mnt_dir,
+                                             mntent->mnt_type,
+                                             is_read_only);
+
       g_hash_table_insert (mounts_hash,
                           mount_entry->device_path,
                           mount_entry->device_path);
-      
+
       return_list = g_list_prepend (return_list, mount_entry);
     }
   g_hash_table_destroy (mounts_hash);
@@ -566,22 +566,18 @@ _g_get_unix_mounts (void)
   G_LOCK (getmntent);
   while (! getmntent (file, &mntent))
     {
-      mount_entry = g_new0 (GUnixMountEntry, 1);
-      
-      mount_entry->mount_path = g_strdup (mntent.mnt_mountp);
-      mount_entry->device_path = g_strdup (mntent.mnt_special);
-      mount_entry->filesystem_type = g_strdup (mntent.mnt_fstype);
-      
+      gboolean is_read_only = FALSE;
+
 #if defined (HAVE_HASMNTOPT)
       if (hasmntopt (&mntent, MNTOPT_RO) != NULL)
-       mount_entry->is_read_only = TRUE;
+       is_read_only = TRUE;
 #endif
 
-      mount_entry->is_system_internal =
-       guess_system_internal (mount_entry->mount_path,
-                              mount_entry->filesystem_type,
-                              mount_entry->device_path);
-      
+      mount_entry = create_unix_mount_entry (mntent.mnt_special,
+                                             mntent.mnt_mountp,
+                                             mntent.mnt_fstype,
+                                             is_read_only);
+
       return_list = g_list_prepend (return_list, mount_entry);
     }
   
@@ -636,25 +632,18 @@ _g_get_unix_mounts (void)
   return_list = NULL;
   while (vmount_number > 0)
     {
-      mount_entry = g_new0 (GUnixMountEntry, 1);
-      
-      mount_entry->device_path = g_strdup (vmt2dataptr (vmount_info, VMT_OBJECT));
-      mount_entry->mount_path = g_strdup (vmt2dataptr (vmount_info, VMT_STUB));
-      /* is_removable = (vmount_info->vmt_flags & MNT_REMOVABLE) ? 1 : 0; */
-      mount_entry->is_read_only = (vmount_info->vmt_flags & MNT_READONLY) ? 1 : 0;
+      gboolean is_read_only = FALSE;
 
       fs_info = getvfsbytype (vmount_info->vmt_gfstype);
-      
-      if (fs_info == NULL)
-       mount_entry->filesystem_type = g_strdup ("unknown");
-      else
-       mount_entry->filesystem_type = g_strdup (fs_info->vfsent_name);
 
-      mount_entry->is_system_internal =
-       guess_system_internal (mount_entry->mount_path,
-                              mount_entry->filesystem_type,
-                              mount_entry->device_path);
-      
+      /* is_removable = (vmount_info->vmt_flags & MNT_REMOVABLE) ? 1 : 0; */
+      is_read_only = (vmount_info->vmt_flags & MNT_READONLY) ? 1 : 0;
+
+      mount_entry = create_unix_mount_entry (vmt2dataptr (vmount_info, VMT_OBJECT),
+                                             vmt2dataptr (vmount_info, VMT_STUB),
+                                             fs_info == NULL ? "unknown" : fs_info->vfsent_name,
+                                             is_read_only);
+
       return_list = g_list_prepend (return_list, mount_entry);
       
       vmount_info = (struct vmount *)( (char*)vmount_info 
@@ -714,11 +703,7 @@ _g_get_unix_mounts (void)
   
   for (i = 0; i < num_mounts; i++)
     {
-      mount_entry = g_new0 (GUnixMountEntry, 1);
-      
-      mount_entry->mount_path = g_strdup (mntent[i].f_mntonname);
-      mount_entry->device_path = g_strdup (mntent[i].f_mntfromname);
-      mount_entry->filesystem_type = g_strdup (mntent[i].f_fstypename);
+      gboolean is_read_only = FALSE;
 
 #if defined(USE_STATVFS)
       if (mntent[i].f_flag & ST_RDONLY)
@@ -727,13 +712,13 @@ _g_get_unix_mounts (void)
 #else
       #error statfs juggling failed
 #endif
-        mount_entry->is_read_only = TRUE;
+        is_read_only = TRUE;
+
+      mount_entry = create_unix_mount_entry (mntent[i].f_mntfromname,
+                                             mntent[i].f_mntonname,
+                                             mntent[i].f_fstypename,
+                                             is_read_only);
 
-      mount_entry->is_system_internal =
-        guess_system_internal (mount_entry->mount_path,
-                               mount_entry->filesystem_type,
-                               mount_entry->device_path);
-      
       return_list = g_list_prepend (return_list, mount_entry);
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]