[gparted] Switch to static class interface for FS_Info



commit a94be2da05c65b36c290d993c89f5580e85042ca
Author: Mike Fleetwood <mike fleetwood googlemail com>
Date:   Fri Jul 8 16:26:32 2016 +0100

    Switch to static class interface for FS_Info
    
    The FS_Info module has a pseudo multi-object interface and used the
    constructor to load the cache.  However all the data in the class is
    static.  An FS_Info object doesn't contain any member variables, yet was
    needed just to call the member functions.
    
    Make all the member functions static removing the need to use any
    FS_Info objects and provide an explicit load_cache() method.

 include/FS_Info.h   |   15 +++++++--------
 src/FS_Info.cc      |   46 +++++++++++++++++++---------------------------
 src/GParted_Core.cc |   16 ++++++----------
 3 files changed, 32 insertions(+), 45 deletions(-)
---
diff --git a/include/FS_Info.h b/include/FS_Info.h
index 1db43bb..1b69b62 100644
--- a/include/FS_Info.h
+++ b/include/FS_Info.h
@@ -38,16 +38,15 @@ struct FS_Entry
 class FS_Info
 {
 public:
-       FS_Info() ;
-       FS_Info( bool do_refresh ) ;
-       ~FS_Info() ;
-       Glib::ustring get_fs_type( const Glib::ustring & path ) ;
-       Glib::ustring get_label( const Glib::ustring & path, bool & found ) ;
-       Glib::ustring get_uuid( const Glib::ustring & path ) ;
-       Glib::ustring get_path_by_uuid( const Glib::ustring & uuid ) ;
-       Glib::ustring get_path_by_label( const Glib::ustring & label ) ;
+       static void load_cache();
+       static Glib::ustring get_fs_type( const Glib::ustring & path );
+       static Glib::ustring get_label( const Glib::ustring & path, bool & found );
+       static Glib::ustring get_uuid( const Glib::ustring & path );
+       static Glib::ustring get_path_by_uuid( const Glib::ustring & uuid );
+       static Glib::ustring get_path_by_label( const Glib::ustring & label );
 
 private:
+       static void initialize_if_required();
        static void set_commands_found();
        static void load_fs_info_cache();
        static const FS_Entry & get_cache_entry_by_path( const Glib::ustring & path );
diff --git a/src/FS_Info.cc b/src/FS_Info.cc
index ea03a65..c205bca 100644
--- a/src/FS_Info.cc
+++ b/src/FS_Info.cc
@@ -46,39 +46,17 @@ bool FS_Info::need_blkid_vfat_cache_update_workaround = true;
 //     ]
 std::vector<FS_Entry> FS_Info::fs_info_cache;
 
-FS_Info::FS_Info()
-{
-       //Ensure that cache has been loaded at least once
-       if ( ! fs_info_cache_initialized )
-       {
-               fs_info_cache_initialized = true ;
-               set_commands_found() ;
-               load_fs_info_cache() ;
-       }
-}
-
-FS_Info:: FS_Info( bool do_refresh )
-{
-       //Ensure that cache has been loaded at least once
-       if ( ! fs_info_cache_initialized )
-       {
-               fs_info_cache_initialized = true ;
-               set_commands_found() ;
-               if ( do_refresh == false )
-                       load_fs_info_cache() ;
-       }
-
-       if ( do_refresh )
-               load_fs_info_cache() ;
-}
-
-FS_Info::~FS_Info()
+void FS_Info::load_cache()
 {
+       set_commands_found();
+       load_fs_info_cache();
+       fs_info_cache_initialized = true;
 }
 
 // Retrieve the file system type for the path
 Glib::ustring FS_Info::get_fs_type( const Glib::ustring & path )
 {
+       initialize_if_required();
        const FS_Entry & fs_entry = get_cache_entry_by_path( path );
        Glib::ustring fs_type = fs_entry.type;
        Glib::ustring fs_sec_type = fs_entry.sec_type;
@@ -109,6 +87,7 @@ Glib::ustring FS_Info::get_fs_type( const Glib::ustring & path )
 // Retrieve the label and set found indicator for the path
 Glib::ustring FS_Info::get_label( const Glib::ustring & path, bool & found )
 {
+       initialize_if_required();
        const FS_Entry & fs_entry = get_cache_entry_by_path( path );
        found = fs_entry.have_label;
        return fs_entry.label;
@@ -117,6 +96,7 @@ Glib::ustring FS_Info::get_label( const Glib::ustring & path, bool & found )
 // Retrieve the uuid given for the path
 Glib::ustring FS_Info::get_uuid( const Glib::ustring & path )
 {
+       initialize_if_required();
        const FS_Entry & fs_entry = get_cache_entry_by_path( path );
        return fs_entry.uuid;
 }
@@ -124,6 +104,7 @@ Glib::ustring FS_Info::get_uuid( const Glib::ustring & path )
 // Retrieve the path given the uuid
 Glib::ustring FS_Info::get_path_by_uuid( const Glib::ustring & uuid )
 {
+       initialize_if_required();
        for ( unsigned int i = 0 ; i < fs_info_cache.size() ; i ++ )
                if ( uuid == fs_info_cache[i].uuid )
                        return fs_info_cache[i].path.m_name;
@@ -134,6 +115,7 @@ Glib::ustring FS_Info::get_path_by_uuid( const Glib::ustring & uuid )
 // Retrieve the path given the label
 Glib::ustring FS_Info::get_path_by_label( const Glib::ustring & label )
 {
+       initialize_if_required();
        for ( unsigned int i = 0 ; i < fs_info_cache.size() ; i ++ )
                if ( label == fs_info_cache[i].label )
                        return fs_info_cache[i].path.m_name;
@@ -143,6 +125,16 @@ Glib::ustring FS_Info::get_path_by_label( const Glib::ustring & label )
 
 // Private methods
 
+void FS_Info::initialize_if_required()
+{
+       if ( ! fs_info_cache_initialized )
+       {
+               set_commands_found();
+               load_fs_info_cache();
+               fs_info_cache_initialized = true;
+       }
+}
+
 void FS_Info::set_commands_found()
 {
        //Set status of commands found 
diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc
index 441614f..7ba50f4 100644
--- a/src/GParted_Core.cc
+++ b/src/GParted_Core.cc
@@ -171,7 +171,7 @@ void GParted_Core::set_devices_thread( std::vector<Device> * pdevices )
                                                // objects are created in the following caches.
        Proc_Partitions_Info::load_cache();     // SHOULD BE SECOND.  Caches /proc/partitions and
                                                // pre-populates BlockSpecial cache.
-       FS_Info fs_info( true ) ;  //Refresh cache of file system information
+       FS_Info::load_cache();
        DMRaid dmraid( true ) ;    //Refresh cache of dmraid device information
        LVM2_PV_Info::clear_cache();            // Cache automatically loaded if and when needed
        btrfs::clear_cache();                   // Cache incrementally loaded if and when needed
@@ -1067,8 +1067,6 @@ void GParted_Core::init_maps()
 
 void GParted_Core::read_mountpoints_from_file( const Glib::ustring & filename, MountMapping & map )
 {
-       FS_Info fs_info ;  //Use cache of file system information
-
        FILE* fp = setmntent( filename .c_str(), "r" ) ;
 
        if ( fp == NULL )
@@ -1083,11 +1081,11 @@ void GParted_Core::read_mountpoints_from_file( const Glib::ustring & filename, M
 
                Glib::ustring uuid = Utils::regexp_label( node, "^UUID=(.*)" ) ;
                if ( ! uuid .empty() )
-                       node = fs_info .get_path_by_uuid( uuid ) ;
+                       node = FS_Info::get_path_by_uuid( uuid );
 
                Glib::ustring label = Utils::regexp_label( node, "^LABEL=(.*)" ) ;
                if ( ! label .empty() )
-                       node = fs_info .get_path_by_label( label ) ;
+                       node = FS_Info::get_path_by_label( label );
 
                if ( ! node .empty() )
                        add_node_and_mountpoint( map, node, mountpoint ) ;
@@ -1483,7 +1481,6 @@ void GParted_Core::set_luks_partition( PartitionLUKS & partition )
 
 void GParted_Core::set_partition_label_and_uuid( Partition & partition )
 {
-       FS_Info fs_info;  // Use cache of file system information
        Glib::ustring partition_path = partition.get_path();
 
        // For SWRaid members only get the label and UUID from SWRaid_Info.  Never use
@@ -1505,14 +1502,14 @@ void GParted_Core::set_partition_label_and_uuid( Partition & partition )
        if ( ! partition.filesystem_label_known() )
        {
                bool label_found = false;
-               Glib::ustring label = fs_info.get_label( partition_path, label_found );
+               Glib::ustring label = FS_Info::get_label( partition_path, label_found );
                if ( label_found )
                        partition.set_filesystem_label( label );
        }
 
        // Retrieve file system UUID.  Use cached method first in an effort to speed up
        // device scanning.
-       partition.uuid = fs_info.get_uuid( partition_path );
+       partition.uuid = FS_Info::get_uuid( partition_path );
        if ( partition.uuid.empty() )
        {
                read_uuid( partition );
@@ -1613,7 +1610,6 @@ FILESYSTEM GParted_Core::detect_filesystem_internal( PedDevice * lp_device, PedP
 FILESYSTEM GParted_Core::detect_filesystem( PedDevice * lp_device, PedPartition * lp_partition,
                                             std::vector<Glib::ustring> & messages )
 {
-       FS_Info fs_info ;
        Glib::ustring fsname = "";
        Glib::ustring path;
 
@@ -1633,7 +1629,7 @@ FILESYSTEM GParted_Core::detect_filesystem( PedDevice * lp_device, PedPartition
        // (Q2) FS_Info (blkid) file system detection
        // Blkid detects more signatures and generally has less limitations so use before
        // libparted detection, but it doesn't report anything for extended partitions.
-       fsname = fs_info.get_fs_type( path );
+       fsname = FS_Info::get_fs_type( path );
 
        // (Q3) Libparted file system detection
        // Only used when blkid didn't report anything and only on partitions, not whole


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