[gparted] Add flag --enable-libparted-dmraid to use native libparted dmraid



commit 2f99511228c01e35df545b2514cb7ba642ce242d
Author: Curtis Gedak <gedakc gmail com>
Date:   Tue Feb 22 13:22:49 2011 -0700

    Add flag --enable-libparted-dmraid to use native libparted dmraid
    
    The new configure option --enable-libparted-dmraid enables the native
    use of /dev/mapper dmraid support in the libparted library.
    
    If this option is not specified, or is disabled, then gparted code
    will be used to support dmraid.  The gparted code uses the old dmraid
    partition naming scheme of always appending the partition number to
    the device name.  The letter 'p' is not inserted between the device
    name and the partition number.  The gparted code is particularly
    useful when used with older versions of libparted that do not support
    /dev/mapper dmraid.
    
    Ubuntu launchpad bug 719129 - [Natty] Gparted duplicates dmraid
                                  partition devices
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/719129

 README                 |   16 ++++++++++++----
 configure.in           |   20 ++++++++++++++++++++
 src/Dialog_Progress.cc |    8 ++++++--
 src/GParted_Core.cc    |   36 ++++++++++++++++++++++++++++++++++--
 4 files changed, 72 insertions(+), 8 deletions(-)
---
diff --git a/README b/README
index 93a523c..c26d2be 100644
--- a/README
+++ b/README
@@ -67,11 +67,19 @@ b. Building from Source
                   perl(XML::Parser) desktop-file-utils
 
    Briefly, the shell commands `./configure; make; make install' should
-   configure, build, and install this package.  If you wish to build
-   this package without the help documentation use the --disable-doc
-   flag:
+   configure, build, and install this package.
+
+   If you wish to build this package without the help documentation use
+   the --disable-doc flag:
       E.g., ./configure --disable-doc
- 
+
+   If you wish to build this package to use native libparted /dev/mapper
+   dmraid support use the --enable-libparted-dmraid flag:
+      E.g., ./configure --enable-libparted-dmraid
+
+   Please note that more than one configure flags can be used:
+      E.g., ./configure --disable-doc --enable-libparted-dmraid
+
    The INSTALL file contains further GNU installation instructions.
 
 
diff --git a/configure.in b/configure.in
index 03ad441..ee5768d 100644
--- a/configure.in
+++ b/configure.in
@@ -171,6 +171,25 @@ fi
 AM_CONDITIONAL([DISABLE_DOC], [test ${enable_doc} = no])
 
 
+dnl======================
+dnl check whether to use native libparted dmraid support
+dnl======================
+AC_ARG_ENABLE([libparted_dmraid],
+  [  --enable-libparted-dmraid   do use native libparted /dev/mapper dmraid support],,)
+if test "x${enable_libparted_dmraid}" = "x" ; then
+	enable_libparted_dmraid=no
+fi
+
+AC_MSG_CHECKING([whether native libparted /dev/mapper dmraid support should be used])
+if test ${enable_libparted_dmraid} = yes; then
+	AC_MSG_RESULT([yes])
+	dnl Set   #define USE_LIBPARTED_DMRAID 1   to indicate documentation not wanted
+	AC_DEFINE([USE_LIBPARTED_DMRAID], [1], [Define to 1 if --enable-libparted-dmraid specified])
+else
+	AC_MSG_RESULT([no])
+fi
+
+
 AC_CONFIG_FILES([
 Makefile
 compose/Makefile
@@ -198,6 +217,7 @@ echo "                   Build documentation?  :  $enable_doc"
 echo ""
 echo "   Need part table re-read work around?  :  $need_pt_reread_work_around"
 echo "     Supports sector sizes > 512 bytes?  :  $support_sector_size_gt_512"
+echo "   Use native libparted dmraid support?  :  $enable_libparted_dmraid"
 echo ""
 echo " If all settings are OK, type make and make install "
 echo "========================================================"
diff --git a/src/Dialog_Progress.cc b/src/Dialog_Progress.cc
index 1921d8a..d8b3616 100644
--- a/src/Dialog_Progress.cc
+++ b/src/Dialog_Progress.cc
@@ -1,5 +1,5 @@
 /* Copyright (C) 2004 Bart
- * Copyright (C) 2008, 2009, 2010 Curtis Gedak
+ * Copyright (C) 2008, 2009, 2010, 2011 Curtis Gedak
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -354,7 +354,11 @@ void Dialog_Progress::on_save()
 			<< "<title>" << _("GParted Details") << "</title>" << std::endl
 			<< "</head>" << std::endl
 			<< "<body>" << std::endl
-			<< "<p>" << _("GParted") << " " << VERSION << "</p>" << std::endl
+			<< "<p>" << _("GParted") << " " << VERSION
+#ifdef USE_LIBPARTED_DMRAID
+			<< " --enable-libparted-dmraid"
+#endif
+			<< "</p>" << std::endl
 			<< "<p>" << _("Libparted") << " " << signal_get_libparted_version .emit() << "</p>" << std::endl ;
 
 			//Write out each operation
diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc
index 3ecf7cd..f3ed5a6 100644
--- a/src/GParted_Core.cc
+++ b/src/GParted_Core.cc
@@ -203,8 +203,10 @@ void GParted_Core::set_devices( std::vector<Device> & devices )
 				dmraid .get_devices( dmraid_devices ) ;
 				for ( unsigned int k=0; k < dmraid_devices .size(); k++ ) {
 					set_thread_status_message( String::ucompose ( _("Scanning %1"), dmraid_devices[k] ) ) ;
+#ifndef USE_LIBPARTED_DMRAID
 					dmraid .create_dev_map_entries( dmraid_devices[k] ) ;
 					settle_device( 1 ) ;
+#endif
 					ped_device_get( dmraid_devices[k] .c_str() ) ;
 				}
 			}
@@ -256,6 +258,7 @@ void GParted_Core::set_devices( std::vector<Device> & devices )
 
 		std::sort( device_paths .begin(), device_paths .end() ) ;
 	}
+#ifndef USE_LIBPARTED_DMRAID
 	else
 	{
 		//Device paths were passed in on the command line.
@@ -270,6 +273,7 @@ void GParted_Core::set_devices( std::vector<Device> & devices )
 			}
 		}
 	}
+#endif
 
 	for ( unsigned int t = 0 ; t < device_paths .size() ; t++ ) 
 	{
@@ -651,6 +655,7 @@ bool GParted_Core::set_disklabel( const Glib::ustring & device_path, const Glib:
 		close_device_and_disk() ;
 	}
 
+#ifndef USE_LIBPARTED_DMRAID
 	//delete and recreate disk entries if dmraid
 	DMRaid dmraid ;
 	if ( return_value && dmraid .is_dmraid_device( device_path ) )
@@ -658,6 +663,7 @@ bool GParted_Core::set_disklabel( const Glib::ustring & device_path, const Glib:
 		dmraid .purge_dev_map_entries( device_path ) ;
 		dmraid .create_dev_map_entries( device_path ) ;
 	}
+#endif
 
 	return return_value ;	
 }
@@ -853,7 +859,6 @@ void GParted_Core::read_mountpoints_from_file_swaps(
 
 Glib::ustring GParted_Core::get_partition_path( PedPartition * lp_partition )
 {
-	DMRaid dmraid;   //Use cache of dmraid device information
 	char * lp_path;  //we have to free the result of ped_partition_get_path()
 	Glib::ustring partition_path = "Partition path not found";
 
@@ -864,13 +869,16 @@ Glib::ustring GParted_Core::get_partition_path( PedPartition * lp_partition )
 		free(lp_path);
 	}
 
+#ifndef USE_LIBPARTED_DMRAID
 	//Ensure partition path name is compatible with dmraid
+	DMRaid dmraid;   //Use cache of dmraid device information
 	if (   dmraid .is_dmraid_supported()
 	    && dmraid .is_dmraid_device( partition_path )
 	   )
 	{
 		partition_path = dmraid .make_path_dmraid_compatible(partition_path);
 	}
+#endif
 
 	return partition_path ;
 }
@@ -880,7 +888,9 @@ void GParted_Core::set_device_partitions( Device & device )
 	int EXT_INDEX = -1 ;
 	Proc_Partitions_Info pp_info ; //Use cache of proc partitions information
 	FS_Info fs_info ;  //Use cache of file system information
+#ifndef USE_LIBPARTED_DMRAID
 	DMRaid dmraid ;    //Use cache of dmraid device information
+#endif
 
 	//clear partitions
 	device .partitions .clear() ;
@@ -899,6 +909,7 @@ void GParted_Core::set_device_partitions( Device & device )
 		{
 			case PED_PARTITION_NORMAL:
 			case PED_PARTITION_LOGICAL:
+#ifndef USE_LIBPARTED_DMRAID
 				//Handle dmraid devices differently because the minor number might not
 				//  match the last number of the partition filename as shown by "ls -l /dev/mapper"
 				//  This mismatch causes incorrect identification of busy partitions in ped_partition_is_busy(). 
@@ -914,6 +925,7 @@ void GParted_Core::set_device_partitions( Device & device )
 						partition_is_busy = true ;
 				}
 				else
+#endif
 					partition_is_busy = ped_partition_is_busy( lp_partition ) ;
 
 				partition_temp .Set( device .get_path(),
@@ -936,6 +948,7 @@ void GParted_Core::set_device_partitions( Device & device )
 				break ;
 			
 			case PED_PARTITION_EXTENDED:
+#ifndef USE_LIBPARTED_DMRAID
 				//Handle dmraid devices differently because the minor number might not
 				//  match the last number of the partition filename as shown by "ls -l /dev/mapper"
 				//  This mismatch causes incorrect identification of busy partitions in ped_partition_is_busy(). 
@@ -954,6 +967,7 @@ void GParted_Core::set_device_partitions( Device & device )
 					}
 				}
 				else
+#endif
 					partition_is_busy = ped_partition_is_busy( lp_partition ) ;
 
 				partition_temp .Set( device .get_path(),
@@ -1276,7 +1290,9 @@ void GParted_Core::insert_unallocated( const Glib::ustring & device_path,
 	
 void GParted_Core::set_mountpoints( std::vector<Partition> & partitions ) 
 {
+#ifndef USE_LIBPARTED_DMRAID
 	DMRaid dmraid ;	//Use cache of dmraid device information
+#endif
 	for ( unsigned int t = 0 ; t < partitions .size() ; t++ )
 	{
 		if ( ( partitions[ t ] .type == GParted::TYPE_PRIMARY ||
@@ -1289,6 +1305,7 @@ void GParted_Core::set_mountpoints( std::vector<Partition> & partitions )
 		{
 			if ( partitions[ t ] .busy )
 			{
+#ifndef USE_LIBPARTED_DMRAID
 				//Handle dmraid devices differently because there may be more
 				//  than one partition name.
 				//  E.g., there might be names with and/or without a 'p' between
@@ -1312,6 +1329,7 @@ void GParted_Core::set_mountpoints( std::vector<Partition> & partitions )
 				}
 				else
 				{
+#endif
 					//Normal device, not DMRaid device
 					for ( unsigned int i = 0 ; i < partitions[ t ] .get_paths() .size() ; i++ )
 					{
@@ -1322,7 +1340,9 @@ void GParted_Core::set_mountpoints( std::vector<Partition> & partitions )
 							break ;
 						}
 					}
+#ifndef USE_LIBPARTED_DMRAID
 				}
+#endif
 
 				if ( partitions[ t ] .get_mountpoints() .empty() )
 					partitions[ t ] .messages .push_back( _("Unable to find mount point") ) ;
@@ -1554,10 +1574,12 @@ bool GParted_Core::create_partition( Partition & new_partition, OperationDetail
 
 	bool succes = new_partition .partition_number > 0 && erase_filesystem_signatures( new_partition ) ;
 
+#ifndef USE_LIBPARTED_DMRAID
 	//create dev map entries if dmraid
 	DMRaid dmraid ;
 	if ( succes && dmraid .is_dmraid_device( new_partition .device_path ) )
 		succes = dmraid .create_dev_map_entries( new_partition, operationdetail .get_last_child() ) ;
+#endif
 
 	operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
 
@@ -1616,6 +1638,7 @@ bool GParted_Core::Delete( const Partition & partition, OperationDetail & operat
 		close_device_and_disk() ;
 	}
 
+#ifndef USE_LIBPARTED_DMRAID
 	//delete partition dev mapper entry, and delete and recreate all other affected dev mapper entries if dmraid
 	DMRaid dmraid ;
 	if ( succes && dmraid .is_dmraid_device( partition .device_path ) )
@@ -1632,6 +1655,7 @@ bool GParted_Core::Delete( const Partition & partition, OperationDetail & operat
 			close_device_and_disk() ;
 		}
 	}
+#endif
 
 	operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
 	return succes ;
@@ -2091,6 +2115,7 @@ bool GParted_Core::resize_move_partition( const Partition & partition_old,
 			STATUS_NONE, 
 			FONT_ITALIC ) ) ;
 
+#ifndef USE_LIBPARTED_DMRAID
 		//update dev mapper entry if partition is dmraid.
 		DMRaid dmraid ;
 		if ( return_value && dmraid .is_dmraid_device( partition_new .device_path ) )
@@ -2102,6 +2127,7 @@ bool GParted_Core::resize_move_partition( const Partition & partition_old,
 				close_device_and_disk() ;
 			}
 		}
+#endif
 	}
 	
 	operationdetail .get_last_child() .set_status( return_value ? STATUS_SUCCES : STATUS_ERROR ) ;
@@ -2837,6 +2863,7 @@ bool GParted_Core::calculate_exact_geom( const Partition & partition_old,
 			STATUS_NONE,
 			FONT_ITALIC ) ) ;
 
+#ifndef USE_LIBPARTED_DMRAID
 		//Update dev mapper entry if partition is dmraid.
 		DMRaid dmraid ;
 		if ( succes && dmraid .is_dmraid_device( partition_new .device_path ) )
@@ -2848,6 +2875,7 @@ bool GParted_Core::calculate_exact_geom( const Partition & partition_old,
 				close_device_and_disk() ;
 			}
 		}
+#endif
 	}
 
 	operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
@@ -3052,12 +3080,14 @@ bool GParted_Core::commit()
 
 bool GParted_Core::commit_to_os( std::time_t timeout ) 
 {
-	DMRaid dmraid ;
 	bool succes ;
+#ifndef USE_LIBPARTED_DMRAID
+	DMRaid dmraid ;
 	if ( dmraid .is_dmraid_device( lp_disk ->dev ->path ) )
 		succes = true ;
 	else
 	{
+#endif
 		succes = ped_disk_commit_to_os( lp_disk ) ;
 #ifndef HAVE_LIBPARTED_2_2_0_PLUS
 		//Work around to try to alleviate problems caused by
@@ -3069,7 +3099,9 @@ bool GParted_Core::commit_to_os( std::time_t timeout )
 			succes = ped_disk_commit_to_os( lp_disk ) ;
 		}
 #endif
+#ifndef USE_LIBPARTED_DMRAID
 	}
+#endif
 
 	settle_device( timeout ) ;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]