Remove mtoolsrc file

fat16 and fat32 were creating a temp mtoolsrc file to configure the
command to reference a drive letter and ignore certain errors.  They have
been changed to pass this information via the command line and environment
instead.
This commit is contained in:
Phillip Susi 2013-01-17 21:13:25 -05:00 committed by Curtis Gedak
parent ddd92cf86a
commit 2706f0174a
3 changed files with 17 additions and 154 deletions

View File

@ -458,63 +458,6 @@ Glib::ustring Utils::regexp_label( const Glib::ustring & text
return "" ; return "" ;
} }
Glib::ustring Utils::create_mtoolsrc_file( char file_name[], const char drive_letter,
const Glib::ustring & device_path )
{
//Create mtools config file
//NOTE: file_name will be changed by the mkstemp() function call.
Glib::ustring err_msg = "" ;
int fd ;
fd = mkstemp( file_name ) ;
if( fd != -1 ) {
Glib::ustring fcontents =
/* TO TRANSLATORS: # Temporary file created by gparted. It may be deleted.
* means that this file is only used while gparted is applying operations.
* If for some reason this file exists at any other time, then the message is
* meant to inform a user that the file can be deleted with no harmful effects.
* This file is typically created, exists for less than a few seconds, and is
* then deleted by gparted. Under normal circumstances a user should never
* see this file.
*/
_("# Temporary file created by gparted. It may be deleted.\n") ;
//The following file contents are mtools keywords (see man mtools.conf)
fcontents = String::ucompose(
"drive %1: file=\"%2\"\nmtools_skip_check=1\n", drive_letter, device_path
);
if( write( fd, fcontents .c_str(), fcontents .size() ) == -1 ) {
err_msg = String::ucompose(
/* TO TRANSLATORS: looks like
* Label operation failed: Unable to write to temporary file /tmp/Y56ZZ3M13LM.
*/
_("Label operation failed: Unable to write to temporary file %1.\n")
, file_name
) ;
}
close( fd ) ;
}
else
{
err_msg = String::ucompose(
/* TO TRANSLATORS: looks like
* Label operation failed: Unable to create temporary file /tmp/Y56ZZ3M13LM.
*/
_("Label operation failed: Unable to create temporary file %1.\n")
, file_name
) ;
}
return err_msg ;
}
Glib::ustring Utils::delete_mtoolsrc_file( const char file_name[] )
{
//Delete mtools config file
Glib::ustring err_msg = "" ;
remove( file_name ) ;
return err_msg ;
}
Glib::ustring Utils::trim( const Glib::ustring & src, const Glib::ustring & c /* = " \t\r\n" */ ) Glib::ustring Utils::trim( const Glib::ustring & src, const Glib::ustring & c /* = " \t\r\n" */ )
{ {
//Trim leading and trailing whitespace from string //Trim leading and trailing whitespace from string

View File

@ -63,6 +63,9 @@ FS fat16::get_filesystem_support()
FS fs ; FS fs ;
fs .filesystem = GParted::FS_FAT16 ; fs .filesystem = GParted::FS_FAT16 ;
// hack to disable silly mtools warnings
setenv( "MTOOLS_SKIP_CHECK", "1", 0 );
//find out if we can create fat16 file systems //find out if we can create fat16 file systems
if ( ! Glib::find_program_in_path( "mkdosfs" ) .empty() ) if ( ! Glib::find_program_in_path( "mkdosfs" ) .empty() )
fs .create = GParted::FS::EXTERNAL ; fs .create = GParted::FS::EXTERNAL ;
@ -150,17 +153,7 @@ void fat16::set_used_sectors( Partition & partition )
void fat16::read_label( Partition & partition ) void fat16::read_label( Partition & partition )
{ {
//Create mtools config file if ( ! Utils::execute_command( "mlabel -s :: -i " + partition.get_path(), output, error, true ) )
char fname[] = "/tmp/gparted-XXXXXXXX" ;
char dletter = 'H' ;
Glib::ustring err_msg = "" ;
err_msg = Utils::create_mtoolsrc_file( fname, dletter, partition.get_path() ) ;
if( err_msg.length() != 0 )
partition .messages .push_back( err_msg );
Glib::ustring cmd = String::ucompose( "export MTOOLSRC=%1 && mlabel -s %2:", fname, dletter ) ;
if ( ! Utils::execute_command( cmd, output, error, true ) )
{ {
partition .set_label( Utils::trim( Utils::regexp_label( output, "Volume label is ([^(]*)" ) ) ) ; partition .set_label( Utils::trim( Utils::regexp_label( output, "Volume label is ([^(]*)" ) ) ) ;
} }
@ -172,25 +165,15 @@ void fat16::read_label( Partition & partition )
if ( ! error .empty() ) if ( ! error .empty() )
partition .messages .push_back( error ) ; partition .messages .push_back( error ) ;
} }
//Delete mtools config file
err_msg = Utils::delete_mtoolsrc_file( fname );
} }
bool fat16::write_label( const Partition & partition, OperationDetail & operationdetail ) bool fat16::write_label( const Partition & partition, OperationDetail & operationdetail )
{ {
//Create mtools config file
char fname[] = "/tmp/gparted-XXXXXXXX" ;
char dletter = 'H' ;
Glib::ustring err_msg = "" ;
err_msg = Utils::create_mtoolsrc_file( fname, dletter, partition.get_path() ) ;
Glib::ustring cmd = "" ; Glib::ustring cmd = "" ;
if ( partition .get_label() .empty() ) if ( partition .get_label() .empty() )
cmd = String::ucompose( "export MTOOLSRC=%1 && mlabel -c %2:", fname, dletter ) ; cmd = "mlabel -c :: -i " + partition.get_path();
else else
cmd = String::ucompose( "export MTOOLSRC=%1 && mlabel %2:\"%3\"", cmd = "mlabel ::\"" + partition.get_label() + "\" -i " + partition.get_path();
fname, dletter, partition .get_label() ) ;
operationdetail .add_child( OperationDetail( cmd, STATUS_NONE, FONT_BOLD_ITALIC ) ) ; operationdetail .add_child( OperationDetail( cmd, STATUS_NONE, FONT_BOLD_ITALIC ) ) ;
@ -202,23 +185,12 @@ bool fat16::write_label( const Partition & partition, OperationDetail & operatio
if ( ! error .empty() ) if ( ! error .empty() )
operationdetail .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ; operationdetail .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ;
//Delete mtools config file
err_msg = Utils::delete_mtoolsrc_file( fname );
return ( exit_status == 0 ); return ( exit_status == 0 );
} }
void fat16::read_uuid( Partition & partition ) void fat16::read_uuid( Partition & partition )
{ {
//Create mtools config file Glib::ustring cmd = "mdir -f :: -i " + partition.get_path();
char fname[] = "/tmp/gparted-XXXXXXXX" ;
char dletter = 'H' ;
Glib::ustring err_msg = "" ;
err_msg = Utils::create_mtoolsrc_file( fname, dletter, partition.get_path() ) ;
if( err_msg.length() != 0 )
partition .messages .push_back( err_msg );
Glib::ustring cmd = String::ucompose( "export MTOOLSRC=%1 && mdir -f %2:", fname, dletter ) ;
if ( ! Utils::execute_command( cmd, output, error, true ) ) if ( ! Utils::execute_command( cmd, output, error, true ) )
{ {
@ -234,21 +206,11 @@ void fat16::read_uuid( Partition & partition )
if ( ! error .empty() ) if ( ! error .empty() )
partition .messages .push_back( error ) ; partition .messages .push_back( error ) ;
} }
err_msg = Utils::delete_mtoolsrc_file( fname );
} }
bool fat16::write_uuid( const Partition & partition, OperationDetail & operationdetail ) bool fat16::write_uuid( const Partition & partition, OperationDetail & operationdetail )
{ {
//Create mtools config file Glib::ustring cmd = "mlabel -s -n :: -i " + partition.get_path();
char fname[] = "/tmp/gparted-XXXXXXXX" ;
char dletter = 'H' ;
Glib::ustring err_msg = "" ;
err_msg = Utils::create_mtoolsrc_file( fname, dletter, partition.get_path() ) ;
// Wait some time - 'random' UUIDs turn out identical if generated in quick succession...
sleep(1);
Glib::ustring cmd = String::ucompose( "export MTOOLSRC=%1 && mlabel -s -n %2:", fname, dletter ) ;
operationdetail .add_child( OperationDetail( cmd, STATUS_NONE, FONT_BOLD_ITALIC ) ) ; operationdetail .add_child( OperationDetail( cmd, STATUS_NONE, FONT_BOLD_ITALIC ) ) ;
@ -260,9 +222,6 @@ bool fat16::write_uuid( const Partition & partition, OperationDetail & operation
if ( ! error .empty() ) if ( ! error .empty() )
operationdetail .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ; operationdetail .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ;
//Delete mtools config file
err_msg = Utils::delete_mtoolsrc_file( fname );
return ( exit_status == 0 ); return ( exit_status == 0 );
} }

View File

@ -51,6 +51,9 @@ FS fat32::get_filesystem_support()
FS fs ; FS fs ;
fs .filesystem = GParted::FS_FAT32 ; fs .filesystem = GParted::FS_FAT32 ;
// hack to disable silly mtools warnings
setenv( "MTOOLS_SKIP_CHECK", "1", 0 );
//find out if we can create fat32 file systems //find out if we can create fat32 file systems
if ( ! Glib::find_program_in_path( "mkdosfs" ) .empty() ) if ( ! Glib::find_program_in_path( "mkdosfs" ) .empty() )
fs .create = GParted::FS::EXTERNAL ; fs .create = GParted::FS::EXTERNAL ;
@ -138,15 +141,7 @@ void fat32::set_used_sectors( Partition & partition )
void fat32::read_label( Partition & partition ) void fat32::read_label( Partition & partition )
{ {
//Create mtools config file Glib::ustring cmd = "mlabel -s :: -i " + partition.get_path();
char fname[] = "/tmp/gparted-XXXXXXXX" ;
char dletter = 'H' ;
Glib::ustring err_msg = "" ;
err_msg = Utils::create_mtoolsrc_file( fname, dletter, partition.get_path() ) ;
if( err_msg.length() != 0 )
partition .messages .push_back( err_msg );
Glib::ustring cmd = String::ucompose( "export MTOOLSRC=%1 && mlabel -s %2:", fname, dletter ) ;
if ( ! Utils::execute_command( cmd, output, error, true ) ) if ( ! Utils::execute_command( cmd, output, error, true ) )
{ {
@ -160,25 +155,15 @@ void fat32::read_label( Partition & partition )
if ( ! error .empty() ) if ( ! error .empty() )
partition .messages .push_back( error ) ; partition .messages .push_back( error ) ;
} }
//Delete mtools config file
err_msg = Utils::delete_mtoolsrc_file( fname );
} }
bool fat32::write_label( const Partition & partition, OperationDetail & operationdetail ) bool fat32::write_label( const Partition & partition, OperationDetail & operationdetail )
{ {
//Create mtools config file
char fname[] = "/tmp/gparted-XXXXXXXX" ;
char dletter = 'H' ;
Glib::ustring err_msg = "" ;
err_msg = Utils::create_mtoolsrc_file( fname, dletter, partition.get_path() ) ;
Glib::ustring cmd = "" ; Glib::ustring cmd = "" ;
if ( partition .get_label() .empty() ) if ( partition .get_label() .empty() )
cmd = String::ucompose( "export MTOOLSRC=%1 && mlabel -c %2:", fname, dletter ) ; cmd = "mlabel -c :: -i " + partition.get_path();
else else
cmd = String::ucompose( "export MTOOLSRC=%1 && mlabel %2:\"%3\"", cmd = "mlabel ::\"" + partition.get_label() + "\" -i " + partition.get_path();
fname, dletter, partition .get_label() ) ;
operationdetail .add_child( OperationDetail( cmd, STATUS_NONE, FONT_BOLD_ITALIC ) ) ; operationdetail .add_child( OperationDetail( cmd, STATUS_NONE, FONT_BOLD_ITALIC ) ) ;
@ -190,23 +175,12 @@ bool fat32::write_label( const Partition & partition, OperationDetail & operatio
if ( ! error .empty() ) if ( ! error .empty() )
operationdetail .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ; operationdetail .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ;
//Delete mtools config file
err_msg = Utils::delete_mtoolsrc_file( fname );
return ( exit_status == 0 ); return ( exit_status == 0 );
} }
void fat32::read_uuid( Partition & partition ) void fat32::read_uuid( Partition & partition )
{ {
//Create mtools config file Glib::ustring cmd = "mdir -f :: -i " + partition.get_path();
char fname[] = "/tmp/gparted-XXXXXXXX" ;
char dletter = 'H' ;
Glib::ustring err_msg = "" ;
err_msg = Utils::create_mtoolsrc_file( fname, dletter, partition.get_path() ) ;
if( err_msg.length() != 0 )
partition .messages .push_back( err_msg );
Glib::ustring cmd = String::ucompose( "export MTOOLSRC=%1 && mdir -f %2:", fname, dletter ) ;
if ( ! Utils::execute_command( cmd, output, error, true ) ) if ( ! Utils::execute_command( cmd, output, error, true ) )
{ {
@ -222,22 +196,12 @@ void fat32::read_uuid( Partition & partition )
if ( ! error .empty() ) if ( ! error .empty() )
partition .messages .push_back( error ) ; partition .messages .push_back( error ) ;
} }
err_msg = Utils::delete_mtoolsrc_file( fname );
} }
bool fat32::write_uuid( const Partition & partition, OperationDetail & operationdetail ) bool fat32::write_uuid( const Partition & partition, OperationDetail & operationdetail )
{ {
//Create mtools config file Glib::ustring cmd = "mlabel -s -n :: -i " + partition.get_path();
char fname[] = "/tmp/gparted-XXXXXXXX" ;
char dletter = 'H' ;
Glib::ustring err_msg = "" ;
err_msg = Utils::create_mtoolsrc_file( fname, dletter, partition.get_path() ) ;
// Wait some time - 'random' UUIDs turn out identical if generated in quick succession...
sleep(1);
Glib::ustring cmd = String::ucompose( "export MTOOLSRC=%1 && mlabel -s -n %2:", fname, dletter ) ;
operationdetail .add_child( OperationDetail( cmd, STATUS_NONE, FONT_BOLD_ITALIC ) ) ; operationdetail .add_child( OperationDetail( cmd, STATUS_NONE, FONT_BOLD_ITALIC ) ) ;
@ -249,9 +213,6 @@ bool fat32::write_uuid( const Partition & partition, OperationDetail & operation
if ( ! error .empty() ) if ( ! error .empty() )
operationdetail .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ; operationdetail .get_last_child() .add_child( OperationDetail( error, STATUS_NONE, FONT_ITALIC ) ) ;
//Delete mtools config file
err_msg = Utils::delete_mtoolsrc_file( fname );
return ( exit_status == 0 ); return ( exit_status == 0 );
} }