[gparted/lucab/btrfs: 2/4] Initial Btrfs-handling modules
- From: Luca Bruno <lucab src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gparted/lucab/btrfs: 2/4] Initial Btrfs-handling modules
- Date: Sat, 19 Jun 2010 08:31:40 +0000 (UTC)
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]