[gparted] Enhance F2FS support (!29)
- From: Mike Fleetwood <mfleetwo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gparted] Enhance F2FS support (!29)
- Date: Tue, 26 Mar 2019 09:17:12 +0000 (UTC)
commit e550509781c32ed5bb0c5839c3f39fed8fa69d6b
Author: Antoine Viallon <antoine viallon gmail com>
Date: Fri Mar 15 19:22:00 2019 +0100
Enhance F2FS support (!29)
- Adds reading of file system usage
- Adds resize (grow) support
- Adds verify support
Closes !29 - Enhance F2FS support
include/f2fs.h | 3 +++
src/f2fs.cc | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 81 insertions(+)
---
diff --git a/include/f2fs.h b/include/f2fs.h
index a7b6cb0c..f0fc380c 100644
--- a/include/f2fs.h
+++ b/include/f2fs.h
@@ -28,7 +28,10 @@ class f2fs : public FileSystem
{
public:
FS get_filesystem_support() ;
+ void set_used_sectors(Partition & partition);
bool create( const Partition & new_partition, OperationDetail & operationdetail ) ;
+ bool resize(const Partition & partition_new, OperationDetail & operationdetail, bool fill_partition);
+ bool check_repair(const Partition & partition, OperationDetail & operationdetail);
};
} //GParted
diff --git a/src/f2fs.cc b/src/f2fs.cc
index 9bb945c3..ec357f4f 100644
--- a/src/f2fs.cc
+++ b/src/f2fs.cc
@@ -31,12 +31,21 @@ FS f2fs::get_filesystem_support()
fs .busy = FS::GPARTED ;
+ if (! Glib::find_program_in_path("dump.f2fs").empty())
+ fs.read = FS::EXTERNAL;
+
if ( ! Glib::find_program_in_path( "mkfs.f2fs" ) .empty() )
{
fs.create = FS::EXTERNAL;
fs.create_with_label = FS::EXTERNAL;
}
+ if (! Glib::find_program_in_path("fsck.f2fs").empty())
+ fs.check = FS::EXTERNAL;
+
+ if (! Glib::find_program_in_path("resize.f2fs").empty())
+ fs.grow = FS::EXTERNAL;
+
fs .copy = FS::GPARTED ;
fs .move = FS::GPARTED ;
fs .online_read = FS::GPARTED ;
@@ -44,6 +53,54 @@ FS f2fs::get_filesystem_support()
return fs ;
}
+
+void f2fs::set_used_sectors(Partition & partition)
+{
+ if (! Utils::execute_command("dump.f2fs -d 1 " + Glib::shell_quote(partition.get_path()), output,
error, true))
+ {
+ long long int user_block_count;
+ long long int valid_block_count;
+ long long int log_blocksize;
+ long long int blocksize;
+ long long int total_fs_sectors;
+
+ Glib::ustring temp;
+ temp = Utils::regexp_label(output, "user_block_count\\s+\\[0x\\s+[0-9a-f]+ : ([0-9]+)\\]");
+ sscanf(temp.c_str(), "%lld", &user_block_count);
+
+ temp = Utils::regexp_label(output, "valid_block_count\\s+\\[0x\\s+[0-9a-f]+ : ([0-9]+)\\]");
+ sscanf(temp.c_str(), "%lld", &valid_block_count);
+
+ temp = Utils::regexp_label(output, "log_blocksize\\s+\\[0x\\s+[0-9a-f]+ : ([0-9]+)\\]");
+ sscanf(temp.c_str(), "%lld", &log_blocksize);
+
+ temp = Utils::regexp_label(output, "sector size = ([0-9]+)");
+ sscanf(temp.c_str(), "%lld", &S);
+
+ temp = Utils::regexp_label(output, "total FS sectors = ([0-9]+)");
+ sscanf(temp.c_str(), "%lld", &total_fs_sectors);
+
+ blocksize = (1 << log_blocksize);
+ N = (user_block_count - valid_block_count)*blocksize;
+ T = total_fs_sectors * S;
+
+ T = Utils::round(T / double(partition.sector_size));
+ N = Utils::round(N / double(partition.sector_size));
+
+ partition.set_sector_usage(T, N);
+ partition.fs_block_size = S;
+ }
+ else
+ {
+ if (! output.empty())
+ partition.push_back_message(output);
+
+ if (! error.empty())
+ partition.push_back_message(error);
+ }
+}
+
+
bool f2fs::create( const Partition & new_partition, OperationDetail & operationdetail )
{
return ! execute_command( "mkfs.f2fs -l " + Glib::shell_quote( new_partition.get_filesystem_label() )
+
@@ -51,4 +108,25 @@ bool f2fs::create( const Partition & new_partition, OperationDetail & operationd
operationdetail, EXEC_CHECK_STATUS );
}
+
+bool f2fs::resize(const Partition & partition_new, OperationDetail & operationdetail, bool fill_partition)
+{
+ Glib::ustring size = "";
+ if (! fill_partition)
+ // resize.f2fs works in sector size units of whatever device the file
+ // system is currently stored on.
+ size = "-t " + Utils::num_to_str(partition_new.get_sector_length()) + " ";
+
+ return ! execute_command("resize.f2fs " + size + Glib::shell_quote(partition_new.get_path()),
+ operationdetail, EXEC_CHECK_STATUS);
+}
+
+
+bool f2fs::check_repair(const Partition & partition, OperationDetail & operationdetail)
+{
+ return ! execute_command("fsck.f2fs -f -y -a " + Glib::shell_quote(partition.get_path()),
+ operationdetail, EXEC_CHECK_STATUS|EXEC_CANCEL_SAFE);
+}
+
+
} //GParted
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]