[gparted] Add nilfs2 support (#642842)
- From: Curtis Gedak <gedakc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gparted] Add nilfs2 support (#642842)
- Date: Fri, 16 Dec 2011 18:45:06 +0000 (UTC)
commit df20b54d00b0560707961255d3521d0c602e4f53
Author: Mike Fleetwood <mike fleetwood googlemail com>
Date: Thu Dec 8 12:45:12 2011 +0000
Add nilfs2 support (#642842)
Requires libparted 2.4 or higher, or blkid from utils-linux 2.20 or
higher for nilfs2 file system detection.
Requires nilfs-utils for nilfs2 file system support.
Closes Bug #642842 - nilfs is not detected
README | 6 ++-
include/Makefile.am | 1 +
include/Utils.h | 9 ++--
include/nilfs2.h | 49 +++++++++++++++++++
src/GParted_Core.cc | 7 +++
src/Makefile.am | 1 +
src/Utils.cc | 5 ++-
src/nilfs2.cc | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++
8 files changed, 203 insertions(+), 7 deletions(-)
---
diff --git a/README b/README
index 837f86f..036b81a 100644
--- a/README
+++ b/README
@@ -133,6 +133,7 @@ Optional packages include:
hfsutils
hfsprogs
jfsutils
+ nilfs-utils
ntfsprogs
reiser4progs
reiserfsprogs
@@ -143,8 +144,9 @@ Optional packages include:
volume labels.
* If the blkid command is in the search path, it will be used
to read file system UUIDs and labels. It is also used for
- ext4 file detection.
- blkid is part of the e2fsprogs package.
+ ext4 file system detection.
+ blkid is part of the util-linux package and e2fsprogs
+ package before that.
For Linux software RAID support, the following package is required:
diff --git a/include/Makefile.am b/include/Makefile.am
index a894212..1975adc 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -48,6 +48,7 @@ EXTRA_DIST = \
i18n.h \
jfs.h \
linux_swap.h \
+ nilfs2.h \
ntfs.h \
reiser4.h \
reiserfs.h \
diff --git a/include/Utils.h b/include/Utils.h
index 508b03c..27023bc 100644
--- a/include/Utils.h
+++ b/include/Utils.h
@@ -69,12 +69,13 @@ enum FILESYSTEM
FS_HFS = 17,
FS_HFSPLUS = 18,
FS_UFS = 19,
+ FS_NILFS2 = 20,
- FS_USED = 20,
- FS_UNUSED = 21,
+ FS_USED = 21,
+ FS_UNUSED = 22,
- FS_LVM2 = 22,
- FS_LUKS = 23
+ FS_LVM2 = 23,
+ FS_LUKS = 24
} ;
enum SIZE_UNIT
diff --git a/include/nilfs2.h b/include/nilfs2.h
new file mode 100644
index 0000000..01c4bdb
--- /dev/null
+++ b/include/nilfs2.h
@@ -0,0 +1,49 @@
+/* Copyright (C) 2011 Mike Fleetwood
+ *
+ * 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 NILFS2_H_
+#define NILFS2_H_
+
+#include "../include/FileSystem.h"
+
+namespace GParted
+{
+
+class nilfs2 : 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 move( const Partition & partition_new
+ , const Partition & partition_old
+ , OperationDetail & operationdetail
+ ) ;
+ 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 /*NILFS2_H_*/
diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc
index 6414d7a..9c6b116 100644
--- a/src/GParted_Core.cc
+++ b/src/GParted_Core.cc
@@ -38,6 +38,7 @@
#include "../include/fat32.h"
#include "../include/linux_swap.h"
#include "../include/reiserfs.h"
+#include "../include/nilfs2.h"
#include "../include/ntfs.h"
#include "../include/xfs.h"
#include "../include/jfs.h"
@@ -124,6 +125,9 @@ void GParted_Core::find_supported_filesystems()
linux_swap fs_linux_swap;
FILESYSTEMS .push_back( fs_linux_swap .get_filesystem_support() ) ;
+ nilfs2 fs_nilfs2;
+ FILESYSTEMS .push_back( fs_nilfs2 .get_filesystem_support() ) ;
+
ntfs fs_ntfs;
FILESYSTEMS .push_back( fs_ntfs .get_filesystem_support() ) ;
@@ -1113,6 +1117,8 @@ GParted::FILESYSTEM GParted_Core::get_filesystem()
return GParted::FS_FAT16 ;
else if ( fs_type == "fat32" )
return GParted::FS_FAT32 ;
+ else if ( fs_type == "nilfs2" )
+ return GParted::FS_NILFS2 ;
else if ( fs_type == "ntfs" )
return GParted::FS_NTFS ;
else if ( fs_type == "reiserfs" )
@@ -2948,6 +2954,7 @@ bool GParted_Core::set_proper_filesystem( const FILESYSTEM & filesystem )
case FS_LINUX_SWAP : p_filesystem = new linux_swap() ; break ;
case FS_FAT16 : p_filesystem = new fat16() ; break ;
case FS_FAT32 : p_filesystem = new fat32() ; break ;
+ case FS_NILFS2 : p_filesystem = new nilfs2() ; break ;
case FS_NTFS : p_filesystem = new ntfs() ; break ;
case FS_REISERFS : p_filesystem = new reiserfs() ; break ;
case FS_REISER4 : p_filesystem = new reiser4() ; break ;
diff --git a/src/Makefile.am b/src/Makefile.am
index ff58ba4..f3f5cf6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -57,6 +57,7 @@ gpartedbin_SOURCES = \
jfs.cc \
linux_swap.cc \
main.cc \
+ nilfs2.cc \
ntfs.cc \
reiser4.cc \
reiserfs.cc \
diff --git a/src/Utils.cc b/src/Utils.cc
index 21b658e..c257f73 100644
--- a/src/Utils.cc
+++ b/src/Utils.cc
@@ -63,7 +63,7 @@ Glib::ustring Utils::num_to_str( Sector number )
return ss .str() ;
}
-//use http://developer.gnome.org/projects/gup/hig/2.0/design.html#Palette as a starting point..
+//use palette from http://developer.gnome.org/hig-book/2.32/design-color.html.en as a starting point.
Glib::ustring Utils::get_color( FILESYSTEM filesystem )
{
switch( filesystem )
@@ -80,6 +80,7 @@ Glib::ustring Utils::get_color( FILESYSTEM filesystem )
case FS_FAT16 : return "#00FF00" ; //green
case FS_FAT32 : return "#18D918" ; // ~ medium green
case FS_EXFAT : return "#2E8B57" ; // ~ sea green
+ case FS_NILFS2 : return "#826647" ; //face skin dark
case FS_NTFS : return "#42E5AC" ; // ~ light turquoise
case FS_REISERFS : return "#ADA7C8" ; //purple hilight
case FS_REISER4 : return "#887FA3" ; //purple medium
@@ -146,6 +147,7 @@ Glib::ustring Utils::get_filesystem_string( FILESYSTEM filesystem )
case FS_FAT16 : return "fat16" ;
case FS_FAT32 : return "fat32" ;
case FS_EXFAT : return "exfat" ;
+ case FS_NILFS2 : return "nilfs2" ;
case FS_NTFS : return "ntfs" ;
case FS_REISERFS : return "reiserfs" ;
case FS_REISER4 : return "reiser4" ;
@@ -177,6 +179,7 @@ Glib::ustring Utils::get_filesystem_software( FILESYSTEM filesystem )
case FS_HFSPLUS : return "hfsprogs" ;
case FS_JFS : return "jfsutils" ;
case FS_LINUX_SWAP : return "util-linux" ;
+ case FS_NILFS2 : return "nilfs-utils" ;
case FS_NTFS : return "ntfsprogs" ;
case FS_REISER4 : return "reiser4progs" ;
case FS_REISERFS : return "reiserfsprogs" ;
diff --git a/src/nilfs2.cc b/src/nilfs2.cc
new file mode 100644
index 0000000..bad4641
--- /dev/null
+++ b/src/nilfs2.cc
@@ -0,0 +1,132 @@
+/* Copyright (C) 2011 Mike Fleetwood
+ *
+ * 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/nilfs2.h"
+
+namespace GParted
+{
+
+FS nilfs2::get_filesystem_support()
+{
+ FS fs ;
+ fs .filesystem = GParted::FS_NILFS2 ;
+
+ if ( ! Glib::find_program_in_path( "mkfs.nilfs2" ) .empty() )
+ {
+ fs .create = GParted::FS::EXTERNAL ;
+ }
+
+ if ( ! Glib::find_program_in_path( "nilfs-tune" ) .empty() )
+ {
+ fs .read = GParted::FS::EXTERNAL ;
+ fs .read_label = GParted::FS::EXTERNAL ;
+ fs .write_label = GParted::FS::EXTERNAL ;
+ }
+
+ fs .copy = GParted::FS::GPARTED ;
+ fs .move = GParted::FS::GPARTED ;
+
+ return fs ;
+}
+
+void nilfs2::set_used_sectors( Partition & partition )
+{
+ if ( ! Utils::execute_command( "nilfs-tune -l " + partition .get_path(), output, error, true ) )
+ {
+ Glib::ustring::size_type index = output .find( "Free blocks count:" ) ;
+ if ( index == Glib::ustring::npos
+ || sscanf( output.substr( index ) .c_str(), "Free blocks count: %Ld", &N ) != 1
+ )
+ N = -1 ;
+
+ index = output .find( "Block size:" ) ;
+ if ( index == Glib::ustring::npos
+ || sscanf( output.substr( index ) .c_str(), "Block size: %Ld", &S ) != 1
+ )
+ S = -1 ;
+
+ if ( N > -1 && S > -1 )
+ partition .Set_Unused( Utils::round( N * ( S / double( partition .sector_size) ) ) ) ;
+ }
+ else
+ {
+ if ( ! output .empty() )
+ partition .messages .push_back( output ) ;
+
+ if ( ! error .empty() )
+ partition .messages .push_back( error ) ;
+ }
+}
+
+void nilfs2::read_label( Partition & partition )
+{
+ if ( ! Utils::execute_command( "nilfs-tune -l " + partition .get_path(), output, error, true ) )
+ {
+ Glib::ustring label = Utils::regexp_label( output, "^Filesystem volume name:[\t ]*(.*)$" ) ;
+ if ( label != "(none)" )
+ partition .label = label;
+ }
+ else
+ {
+ if ( ! output .empty() )
+ partition .messages .push_back( output ) ;
+
+ if ( ! error .empty() )
+ partition .messages .push_back( error ) ;
+ }
+}
+
+bool nilfs2::write_label( const Partition & partition, OperationDetail & operationdetail )
+{
+ return ! execute_command( "nilfs-tune -L \"" + partition .label + "\" " + partition .get_path(), operationdetail ) ;
+}
+
+bool nilfs2::create( const Partition & new_partition, OperationDetail & operationdetail )
+{
+ return ! execute_command( "mkfs.nilfs2 -L \"" + new_partition .label + "\" " + new_partition .get_path(), operationdetail ) ;
+}
+
+bool nilfs2::resize( const Partition & partition_new, OperationDetail & operationdetail, bool fill_partition )
+{
+ //FIXME: Implement file system resizing. Must be mounted like
+ // xfs, jfs and btrfs.
+ return true ;
+}
+
+bool nilfs2::move( const Partition & partition_new
+ , const Partition & partition_old
+ , OperationDetail & operationdetail
+ )
+{
+ return true ;
+}
+
+bool nilfs2::copy( const Glib::ustring & src_part_path
+ , const Glib::ustring & dest_part_path
+ , OperationDetail & operationdetail
+ )
+{
+ return true ;
+}
+
+bool nilfs2::check_repair( const Partition & partition, OperationDetail & operationdetail )
+{
+ return true ;
+}
+
+} //GParted
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]