[gparted] Switch to static class interface for FS_Info
- From: Curtis Gedak <gedakc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gparted] Switch to static class interface for FS_Info
- Date: Sun, 7 Aug 2016 20:54:36 +0000 (UTC)
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]