From 4e9d36810293b81d0351a351971cdf3b563bfcda Mon Sep 17 00:00:00 2001 From: Bart Hakvoort Date: Sun, 7 Jan 2007 20:29:03 +0000 Subject: [PATCH] added a check to see wether a device is 'real' or not. Thanks to Francois Dupoux for the patch. svn path=/trunk/; revision=764 --- ChangeLog | 5 +++++ src/GParted_Core.cc | 19 ++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e6ce0781..4d45ec71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-01-07 Bart Hakvoort + + * src/GParted_Core.cc: added a check to see wether a device is 'real' + or not. (thanks to François Dupoux for the patch) + 2006-12-19 Theppitak Karoonboonyanan * configure.in: Added 'th' (Thai) to ALL_LINGUAS. diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc index 9bd24eb6..723eeb34 100644 --- a/src/GParted_Core.cc +++ b/src/GParted_Core.cc @@ -155,7 +155,20 @@ void GParted_Core::set_devices( std::vector & devices ) lp_device = ped_device_get_next( NULL ); while ( lp_device ) { - device_paths .push_back( lp_device ->path ) ; + //only add this device if we can read the first sector (which means it's a real device) + char * buf = static_cast( malloc( lp_device ->sector_size ) ) ; + if ( buf ) + { + if ( ped_device_open( lp_device ) ) + { + if ( ped_device_read( lp_device, buf, 0, 1 ) ) + device_paths .push_back( lp_device ->path ) ; + + ped_device_close( lp_device ) ; + } + + free( buf ) ; + } lp_device = ped_device_get_next( lp_device ) ; } @@ -163,10 +176,10 @@ void GParted_Core::set_devices( std::vector & devices ) std::sort( device_paths .begin(), device_paths .end() ) ; } - + for ( unsigned int t = 0 ; t < device_paths .size() ; t++ ) { - if ( device_paths[ t ] .length() > 6 && device_paths[ t ] .is_ascii() && open_device_and_disk( device_paths[ t ], false ) ) + if ( open_device_and_disk( device_paths[ t ], false ) ) { temp_device .Reset() ;