[gparted/lucab/btrfs: 2/4] Initial Btrfs-handling modules



commit 8debbbe7c8643aa2123253956a755467997a5520
Author: Luca Bruno <lucab debian org>
Date:   Sat Jan 2 12:11:50 2010 +0100

    Initial Btrfs-handling modules
    
    This adds initial handlers for Btrfs; only .create, .check and
    .read_label are done for now, via external btrfs-tools.
    Other methods are still only stubs.

 include/Makefile.am |    7 +++-
 include/btrfs.h     |   42 ++++++++++++++++++++
 src/Makefile.am     |    7 +++-
 src/btrfs.cc        |  105 +++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 159 insertions(+), 2 deletions(-)
---
diff --git a/include/Makefile.am b/include/Makefile.am
index 4317b2f..51b6114 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,5 +1,9 @@
 gparted_includedir = $(pkgincludedir)
 
+if BTRFS_SUPPORT
+btrfs_source = btrfs.h
+endif
+
 EXTRA_DIST = \
 	Device.h 			\
 	Dialog_Base_Partition.h		\
@@ -48,4 +52,5 @@ EXTRA_DIST = \
 	reiser4.h   			\
 	reiserfs.h  			\
 	ufs.h  				\
-	xfs.h
+	xfs.h				\
+	$(btrfs_source)
diff --git a/include/btrfs.h b/include/btrfs.h
new file mode 100644
index 0000000..2f6aafc
--- /dev/null
+++ b/include/btrfs.h
@@ -0,0 +1,42 @@
+/* Copyright (C) 2009,2010 Luca Bruno <lucab debian org>
+ *
+ *  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
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef BTRFS_H_
+#define BTRFS_H_
+
+#include "../include/FileSystem.h"
+
+namespace GParted
+{
+class btrfs : public FileSystem
+{
+public:
+	FS get_filesystem_support() ;
+	void set_used_sectors( Partition & partition ) ;
+	void read_label( Partition & partition ) ;
+	bool write_label( const Partition & partition, OperationDetail & operationdetail ) ;
+	bool create( const Partition & new_partition, OperationDetail & operationdetail ) ;
+	bool resize( const Partition & partition_new, OperationDetail & operationdetail, bool fill_partition = false ) ;
+	bool copy( const Glib::ustring & src_part_path,
+		   const Glib::ustring & dest_part_path,
+		   OperationDetail & operationdetail ) ;
+	bool check_repair( const Partition & partition, OperationDetail & operationdetail ) ;
+};
+} //GParted
+
+#endif //BTRFS_H_
diff --git a/src/Makefile.am b/src/Makefile.am
index d4b6f6d..ba99f54 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -7,6 +7,10 @@ AM_CFLAGS = -Wall
 
 AM_CXXFLAGS = -Wall	
 
+if BTRFS_SUPPORT
+btrfs_source = btrfs.cc
+endif
+
 sbin_PROGRAMS = gpartedbin
 
 gpartedbin_SOURCES = \
@@ -57,7 +61,8 @@ gpartedbin_SOURCES = \
 	reiser4.cc 			\
 	reiserfs.cc			\
 	ufs.cc				\
-	xfs.cc
+	xfs.cc				\
+	$(btrfs_source)
 	
 gpartedbin_LDFLAGS = -lparted -lgthread-2.0 
 
diff --git a/src/btrfs.cc b/src/btrfs.cc
new file mode 100644
index 0000000..e2f7e41
--- /dev/null
+++ b/src/btrfs.cc
@@ -0,0 +1,105 @@
+/* Copyright (C) 2009,2010 Luca Bruno <lucab debian org>
+ *
+ *  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
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#include "../include/btrfs.h"
+
+namespace GParted
+{
+
+FS btrfs::get_filesystem_support()
+{
+	FS fs ;
+	fs .filesystem = GParted::FS_BTRFS ;
+
+	if ( ! Glib::find_program_in_path( "btrfs-show" ) .empty() )
+	{
+		fs .read = GParted::FS::EXTERNAL ;
+		fs .read_label = FS::EXTERNAL ;
+	}
+
+	if ( ! Glib::find_program_in_path( "mkfs.btrfs" ) .empty() )
+		fs .create = GParted::FS::EXTERNAL ;
+
+	if ( ! Glib::find_program_in_path( "btrfsck" ) .empty() )
+		fs .check = GParted::FS::EXTERNAL ;
+
+	if ( fs .check )
+	{
+		fs .copy = GParted::FS::GPARTED ;
+		fs .move = GParted::FS::GPARTED ;
+	}
+
+	fs .MIN = 256 * MEBIBYTE ;
+
+	return fs ;
+}
+
+bool btrfs::create( const Partition & new_partition, OperationDetail & operationdetail )
+{
+	return (! execute_command( "mkfs.btrfs -L \"" + new_partition .label + "\" " + new_partition .get_path(), operationdetail ) );
+}
+
+bool btrfs::check_repair( const Partition & partition, OperationDetail & operationdetail )
+{
+	return (! execute_command( "btrfsck " + partition .get_path(), operationdetail )) ;
+}
+
+void btrfs::set_used_sectors( Partition & partition )
+{
+// TODO
+    return;
+}
+
+bool btrfs::write_label( const Partition & partition, OperationDetail & operationdetail )
+{
+// TODO
+        return true ;
+}
+
+bool btrfs::copy( const Glib::ustring & src_part_path,
+                    const Glib::ustring & dest_part_path,
+                    OperationDetail & operationdetail )
+{
+// TODO
+        return true ;
+}
+
+bool btrfs::resize( const Partition & partition_new, OperationDetail & operationdetail, bool fill_partition )
+{
+// TODO
+        return true ;
+}
+
+void btrfs::read_label( Partition & partition )
+{
+        if ( ! Utils::execute_command( "btrfs-show " + partition .get_path(), output, error, true ) )
+        {
+                partition .label = Utils::regexp_label( output, "^Label ([^\n\t]*)" ) ;
+        }
+        else
+        {
+                if ( ! output .empty() )
+                        partition .messages .push_back( output ) ;
+
+                if ( ! error .empty() )
+                        partition .messages .push_back( error ) ;
+        }
+
+}
+
+} //GParted



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