extended scan for mountpoints (see #333370)
* include/GParted_Core.h, src/GParted_Core.cc: extended scan for mountpoints (see #333370)
This commit is contained in:
parent
58eff60c68
commit
170eb4b4a4
|
@ -1,3 +1,8 @@
|
||||||
|
2006-03-05 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
|
||||||
|
* include/GParted_Core.h,
|
||||||
|
src/GParted_Core.cc: extended scan for mountpoints (see #333370)
|
||||||
|
|
||||||
2006-03-05 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
2006-03-05 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
|
||||||
* src/Dialog_Partition_Info.cc,
|
* src/Dialog_Partition_Info.cc,
|
||||||
|
|
|
@ -73,6 +73,7 @@ private:
|
||||||
GParted::FILESYSTEM get_filesystem() ;
|
GParted::FILESYSTEM get_filesystem() ;
|
||||||
bool check_device_path( const Glib::ustring & device_path ) ;
|
bool check_device_path( const Glib::ustring & device_path ) ;
|
||||||
void set_device_partitions( Device & device ) ;
|
void set_device_partitions( Device & device ) ;
|
||||||
|
void read_mountpoints_from_file( const Glib::ustring & filename ) ;
|
||||||
void init_maps() ;
|
void init_maps() ;
|
||||||
void set_mountpoints( std::vector<Partition> & partitions ) ;
|
void set_mountpoints( std::vector<Partition> & partitions ) ;
|
||||||
void set_short_paths( std::vector<Partition> & partitions ) ;
|
void set_short_paths( std::vector<Partition> & partitions ) ;
|
||||||
|
|
|
@ -180,20 +180,16 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
|
||||||
short_paths .clear() ;
|
short_paths .clear() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GParted_Core::init_maps()
|
void GParted_Core::read_mountpoints_from_file( const Glib::ustring & filename )
|
||||||
{
|
{
|
||||||
std::string line ;
|
std::string line ;
|
||||||
|
|
||||||
short_paths .clear() ;
|
|
||||||
mount_info .clear() ;
|
|
||||||
|
|
||||||
//initialize mountpoints..
|
|
||||||
char node[255], mountpoint[255] ;
|
char node[255], mountpoint[255] ;
|
||||||
unsigned int index ;
|
unsigned int index ;
|
||||||
std::ifstream proc_mounts( "/proc/mounts" ) ;
|
|
||||||
if ( proc_mounts )
|
std::ifstream file( filename .c_str() ) ;
|
||||||
|
if ( file )
|
||||||
{
|
{
|
||||||
while ( getline( proc_mounts, line ) )
|
while ( getline( file, line ) )
|
||||||
if ( Glib::str_has_prefix( line, "/" ) &&
|
if ( Glib::str_has_prefix( line, "/" ) &&
|
||||||
sscanf( line .c_str(), "%255s %255s", node, mountpoint ) == 2 &&
|
sscanf( line .c_str(), "%255s %255s", node, mountpoint ) == 2 &&
|
||||||
static_cast<Glib::ustring>( node ) != "/dev/root" )
|
static_cast<Glib::ustring>( node ) != "/dev/root" )
|
||||||
|
@ -207,26 +203,30 @@ void GParted_Core::init_maps()
|
||||||
mount_info[ node ] .push_back( line ) ;
|
mount_info[ node ] .push_back( line ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
proc_mounts .close() ;
|
file .close() ;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//above list lacks the root mountpoint, try to get it from /etc/mtab
|
void GParted_Core::init_maps()
|
||||||
std::ifstream etc_mtab( "/etc/mtab" ) ;
|
{
|
||||||
if ( etc_mtab )
|
short_paths .clear() ;
|
||||||
|
mount_info .clear() ;
|
||||||
|
|
||||||
|
read_mountpoints_from_file( "/proc/mounts" ) ;
|
||||||
|
read_mountpoints_from_file( "/etc/mtab" ) ;
|
||||||
|
|
||||||
|
//sort the mountpoints and remove duplicates..
|
||||||
|
for ( iter_mp = mount_info .begin() ; iter_mp != mount_info .end() ; ++iter_mp )
|
||||||
{
|
{
|
||||||
while ( getline( etc_mtab, line ) )
|
std::sort( iter_mp ->second .begin(), iter_mp ->second .end() ) ;
|
||||||
if ( Glib::str_has_prefix( line, "/" ) &&
|
|
||||||
sscanf( line .c_str(), "%255s %255s", node, mountpoint ) == 2 &&
|
|
||||||
static_cast<Glib::ustring>( mountpoint ) == "/" )
|
|
||||||
{
|
|
||||||
mount_info[ node ] .push_back( "/" ) ;
|
|
||||||
break ;
|
|
||||||
}
|
|
||||||
|
|
||||||
etc_mtab .close() ;
|
iter_mp ->second .erase(
|
||||||
|
std::unique( iter_mp ->second .begin(), iter_mp ->second .end() ),
|
||||||
|
iter_mp ->second .end() ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
//initialize shortpaths...
|
//initialize shortpaths...
|
||||||
|
std::string line ;
|
||||||
std::ifstream proc_partitions( "/proc/partitions" ) ;
|
std::ifstream proc_partitions( "/proc/partitions" ) ;
|
||||||
if ( proc_partitions )
|
if ( proc_partitions )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue