update ntfsbootsector after first sector has changed. This is necessary to
* include/GParted_Core.h, src/GParted_Core.cc: update ntfsbootsector after first sector has changed. This is necessary to let windows boot correctly afterwards. * src/ntfs.cc: added FIXME
This commit is contained in:
parent
1cd71ef2f2
commit
7eb2a9cbb1
|
@ -2,6 +2,13 @@
|
||||||
|
|
||||||
* src/GParted_Core.cc: simplified algorithm to get remaining time
|
* src/GParted_Core.cc: simplified algorithm to get remaining time
|
||||||
|
|
||||||
|
2006-09-04 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
|
||||||
|
* include/GParted_Core.h,
|
||||||
|
src/GParted_Core.cc: update ntfsbootsector after first sector has
|
||||||
|
changed. This is necessary to let windows boot correctly afterwards.
|
||||||
|
* src/ntfs.cc: added FIXME
|
||||||
|
|
||||||
2006-09-03 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
2006-09-03 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
|
||||||
* include/GParted_Core.h,
|
* include/GParted_Core.h,
|
||||||
|
|
|
@ -140,6 +140,7 @@ private:
|
||||||
bool set_proper_filesystem( const FILESYSTEM & filesystem ) ;
|
bool set_proper_filesystem( const FILESYSTEM & filesystem ) ;
|
||||||
bool wait_for_node( const Glib::ustring & node ) ;
|
bool wait_for_node( const Glib::ustring & node ) ;
|
||||||
bool erase_filesystem_signatures( const Partition & partition ) ;
|
bool erase_filesystem_signatures( const Partition & partition ) ;
|
||||||
|
bool update_bootsector( const Partition & partition, OperationDetail & operationdetail ) ;
|
||||||
|
|
||||||
//general..
|
//general..
|
||||||
bool open_device( const Glib::ustring & device_path ) ;
|
bool open_device( const Glib::ustring & device_path ) ;
|
||||||
|
|
|
@ -1099,6 +1099,7 @@ bool GParted_Core::move( const Device & device,
|
||||||
return check_repair_filesystem( partition_old, operationdetail ) &&
|
return check_repair_filesystem( partition_old, operationdetail ) &&
|
||||||
move_filesystem( partition_old, partition_new, operationdetail ) &&
|
move_filesystem( partition_old, partition_new, operationdetail ) &&
|
||||||
resize_move_partition( partition_old, partition_new, operationdetail ) &&
|
resize_move_partition( partition_old, partition_new, operationdetail ) &&
|
||||||
|
update_bootsector( partition_new, operationdetail ) &&
|
||||||
check_repair_filesystem( partition_new, operationdetail ) &&
|
check_repair_filesystem( partition_new, operationdetail ) &&
|
||||||
maximize_filesystem( partition_new, operationdetail ) ;
|
maximize_filesystem( partition_new, operationdetail ) ;
|
||||||
}
|
}
|
||||||
|
@ -1491,6 +1492,7 @@ bool GParted_Core::copy( const Partition & partition_src,
|
||||||
operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
|
operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
|
||||||
|
|
||||||
return ( succes &&
|
return ( succes &&
|
||||||
|
update_bootsector( partition_dst, operationdetail ) &&
|
||||||
check_repair_filesystem( partition_dst, operationdetail ) &&
|
check_repair_filesystem( partition_dst, operationdetail ) &&
|
||||||
maximize_filesystem( partition_dst, operationdetail ) ) ;
|
maximize_filesystem( partition_dst, operationdetail ) ) ;
|
||||||
}
|
}
|
||||||
|
@ -1909,7 +1911,7 @@ bool GParted_Core::calculate_exact_geom( const Partition & partition_old,
|
||||||
FONT_ITALIC ) ) ;
|
FONT_ITALIC ) ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
|
operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
|
||||||
return succes ;
|
return succes ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1986,6 +1988,48 @@ bool GParted_Core::erase_filesystem_signatures( const Partition & partition )
|
||||||
return return_value ;
|
return return_value ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GParted_Core::update_bootsector( const Partition & partition, OperationDetail & operationdetail )
|
||||||
|
{
|
||||||
|
//only for ntfs atm...
|
||||||
|
//FIXME: 1) this should be done without relying on external commands
|
||||||
|
// 2) this should probably be done in the fsclasses...
|
||||||
|
if ( partition .filesystem == FS_NTFS )
|
||||||
|
{
|
||||||
|
operationdetail .add_child( OperationDetail(
|
||||||
|
String::ucompose( _("updating bootsector of %1 filesystem on %2"),
|
||||||
|
Utils::get_filesystem_string( partition .filesystem ),
|
||||||
|
partition .get_path() ) ) ) ;
|
||||||
|
|
||||||
|
std::stringstream ss ;
|
||||||
|
ss << std::hex << partition .sector_start ;
|
||||||
|
Glib::ustring hex = ss .str() ;
|
||||||
|
|
||||||
|
//fill with zeros and reverse...
|
||||||
|
hex .insert( 0, 8 - hex .length(), '0' ) ;
|
||||||
|
Glib::ustring reversed_hex ;
|
||||||
|
for ( int t = 6 ; t >= 0 ; t -=2 )
|
||||||
|
reversed_hex .append( hex .substr( t, 2 ) ) ;
|
||||||
|
|
||||||
|
Glib::ustring output, error, command ;
|
||||||
|
command =
|
||||||
|
"echo " + reversed_hex + " | /usr/bin/xxd -r -p | /bin/dd conv=notrunc of=" + partition .get_path() + " bs=1 seek=28" ;
|
||||||
|
|
||||||
|
operationdetail .get_last_child() .add_child( OperationDetail( command, STATUS_NONE, FONT_BOLD_ITALIC ) ) ;
|
||||||
|
bool succes = ! Utils::execute_command( command, output, error ) ;
|
||||||
|
|
||||||
|
if ( ! output .empty() )
|
||||||
|
operationdetail .get_last_child() .get_last_child() .add_child( OperationDetail( output, STATUS_NONE, FONT_ITALIC ) ) ;
|
||||||
|
|
||||||
|
if ( ! error .empty() )
|
||||||
|
operationdetail .get_last_child() .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ;
|
||||||
|
|
||||||
|
operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
|
||||||
|
return succes ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
bool GParted_Core::open_device( const Glib::ustring & device_path )
|
bool GParted_Core::open_device( const Glib::ustring & device_path )
|
||||||
{
|
{
|
||||||
lp_device = ped_device_get( device_path .c_str() );
|
lp_device = ped_device_get( device_path .c_str() );
|
||||||
|
|
|
@ -67,7 +67,7 @@ void ntfs::set_used_sectors( Partition & partition )
|
||||||
if ( N > -1 )
|
if ( N > -1 )
|
||||||
partition .set_used( Utils::round( N / 512.0 ) ) ;
|
partition .set_used( Utils::round( N / 512.0 ) ) ;
|
||||||
}
|
}
|
||||||
else
|
else//FIXME: i think it's a good idea to push the output here as well
|
||||||
partition .messages .push_back( error ) ;
|
partition .messages .push_back( error ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue