Added parse devices from /proc/partitions for "Scanning all devices..." code

svn path=/trunk/; revision=847
This commit is contained in:
Curtis Gedak 2008-05-08 16:25:43 +00:00
parent 85191346b3
commit 7bf6c422ff
2 changed files with 35 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2008-05-08 Curtis Gedak <gedakc@gmail.com>
* src/GParted_Core.cc: Added parse devices from /proc/partitions
- If /proc/partitions doesn't exist then use ped_device_probe_all
- Closes GParted bugs #351753, and #453555
2008-05-06 Curtis Gedak <gedakc@gmail.com> 2008-05-06 Curtis Gedak <gedakc@gmail.com>
* gparted.in: Fixed problem with command line devices being ignored * gparted.in: Fixed problem with command line devices being ignored

View File

@ -39,7 +39,7 @@
#include "../include/ufs.h" #include "../include/ufs.h"
#include <cerrno> #include <cerrno>
#include <sys/statvfs.h> #include <sys/statvfs.h>
std::vector<Glib::ustring> libparted_messages ; //see ped_exception_handler() std::vector<Glib::ustring> libparted_messages ; //see ped_exception_handler()
@ -65,7 +65,7 @@ GParted_Core::GParted_Core()
std::cout << "======================" << std::endl ; std::cout << "======================" << std::endl ;
std::cout << "libparted : " << ped_get_version() << std::endl ; std::cout << "libparted : " << ped_get_version() << std::endl ;
std::cout << "======================" << std::endl ; std::cout << "======================" << std::endl ;
//initialize filesystemlist //initialize filesystemlist
find_supported_filesystems() ; find_supported_filesystems() ;
} }
@ -135,9 +135,34 @@ void GParted_Core::set_devices( std::vector<Device> & devices )
if ( probe_devices ) if ( probe_devices )
{ {
device_paths .clear() ; device_paths .clear() ;
//try to find all available devices //try to find all available devices
ped_device_probe_all(); std::ifstream proc_partitions( "/proc/partitions" ) ;
if ( proc_partitions )
{
//parse device names from /proc/partitions
std::string line ;
std::string device ;
while ( getline( proc_partitions, line ) )
{
//Device names without a trailing digit refer to the whole disk.
//These whole disk devices are the ones we want.
device = Utils::regexp_label(line, "^[\t ]+[0-9]+[\t ]+[0-9]+[\t ]+[0-9]+[\t ]+([^0-9]+)$") ;
if ( device != "" )
{
//try to have libparted detect the device and add it to the list
device = "/dev/" + device;
ped_device_get( device .c_str() ) ;
}
}
proc_partitions .close() ;
}
else
{
//file /proc/partitions doesn't exist so use libparted to probe devices
ped_device_probe_all();
}
lp_device = ped_device_get_next( NULL ); lp_device = ped_device_get_next( NULL );
while ( lp_device ) while ( lp_device )
{ {
@ -152,10 +177,8 @@ void GParted_Core::set_devices( std::vector<Device> & devices )
ped_device_close( lp_device ) ; ped_device_close( lp_device ) ;
} }
free( buf ) ; free( buf ) ;
} }
lp_device = ped_device_get_next( lp_device ) ; lp_device = ped_device_get_next( lp_device ) ;
} }
close_device_and_disk() ; close_device_and_disk() ;