From 828a4060cc33656dcaef3fa5db45ad2bb46dbcb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 25 Feb 2016 23:46:31 +0000 Subject: [PATCH] Add forgotten files. --- src/fs/f2fs.cpp | 122 ++++++++++++++++++++++++++++++++++++++++++++++++ src/fs/f2fs.h | 112 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100644 src/fs/f2fs.cpp create mode 100644 src/fs/f2fs.h diff --git a/src/fs/f2fs.cpp b/src/fs/f2fs.cpp new file mode 100644 index 0000000..490b1b1 --- /dev/null +++ b/src/fs/f2fs.cpp @@ -0,0 +1,122 @@ +/************************************************************************* + * Copyright (C) 2016 by Andrius Štikonas * + * * + * 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 3 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see .* + *************************************************************************/ + +#include "fs/f2fs.h" + +#include "util/externalcommand.h" +#include "util/capacity.h" +#include "util/report.h" + +#include + +#include +#include +#include + +#include + +namespace FS +{ +FileSystem::CommandSupportType f2fs::m_GetUsed = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_GetLabel = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_Create = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_Grow = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_Shrink = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_Move = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_Check = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_Copy = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_Backup = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_SetLabel = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_UpdateUUID = FileSystem::cmdSupportNone; +FileSystem::CommandSupportType f2fs::m_GetUUID = FileSystem::cmdSupportNone; + +f2fs::f2fs(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label) : + FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::F2fs) +{ +} + +void f2fs::init() +{ + m_Create = findExternal(QStringLiteral("mkfs.f2fs")) ? cmdSupportFileSystem : cmdSupportNone; + m_Check = findExternal(QStringLiteral("fsck.f2fs")) ? cmdSupportFileSystem : cmdSupportNone; + + m_GetLabel = cmdSupportCore; +// m_SetLabel = findExternal(QStringLiteral("nilfs-tune")) ? cmdSupportFileSystem : cmdSupportNone; +// m_UpdateUUID = findExternal(QStringLiteral("nilfs-tune")) ? cmdSupportFileSystem : cmdSupportNone; + +// m_Grow = (m_Check != cmdSupportNone && findExternal(QStringLiteral("nilfs-resize"))) ? cmdSupportFileSystem : cmdSupportNone; +// m_GetUsed = findExternal(QStringLiteral("nilfs-tune")) ? cmdSupportFileSystem : cmdSupportNone; +// m_Shrink = (m_Grow != cmdSupportNone && m_GetUsed != cmdSupportNone) ? cmdSupportFileSystem : cmdSupportNone; + + m_Copy = (m_Check != cmdSupportNone) ? cmdSupportCore : cmdSupportNone; + m_Move = (m_Check != cmdSupportNone) ? cmdSupportCore : cmdSupportNone; + + m_GetLabel = cmdSupportCore; + m_Backup = cmdSupportCore; + m_GetUUID = cmdSupportCore; +} + +bool f2fs::supportToolFound() const +{ + return +// m_GetUsed != cmdSupportNone && + m_GetLabel != cmdSupportNone && +// m_SetLabel != cmdSupportNone && + m_Create != cmdSupportNone && + m_Check != cmdSupportNone && +// m_UpdateUUID != cmdSupportNone && +// m_Grow != cmdSupportNone && +// m_Shrink != cmdSupportNone && + m_Copy != cmdSupportNone && + m_Move != cmdSupportNone && + m_Backup != cmdSupportNone && + m_GetUUID != cmdSupportNone; +} + +FileSystem::SupportTool f2fs::supportToolName() const +{ + return SupportTool(QStringLiteral("f2fs-tools"), QUrl(QStringLiteral("https://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git"))); +} + +qint64 f2fs::minCapacity() const +{ + return 128 * Capacity::unitFactor(Capacity::Byte, Capacity::MiB); // FIXME +} + +qint64 f2fs::maxCapacity() const +{ + return 16 * Capacity::unitFactor(Capacity::Byte, Capacity::TiB); +} + +qint64 f2fs::maxLabelLength() const +{ + return 80; +} + +bool f2fs::check(Report& report, const QString& deviceNode) const +{ + ExternalCommand cmd(report, QStringLiteral("fsck.f2fs"), QStringList() << deviceNode); + return cmd.run(-1) && cmd.exitCode() == 0; +} + +bool f2fs::create(Report& report, const QString& deviceNode) const +{ + ExternalCommand cmd(report, QStringLiteral("mkfs.f2fs"), QStringList() << deviceNode); + return cmd.run(-1) && cmd.exitCode() == 0; +} + +} diff --git a/src/fs/f2fs.h b/src/fs/f2fs.h new file mode 100644 index 0000000..3b6f09e --- /dev/null +++ b/src/fs/f2fs.h @@ -0,0 +1,112 @@ +/************************************************************************* + * Copyright (C) 2016 by Andrius Štikonas * + * * + * 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 3 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see .* + *************************************************************************/ + +#if !defined(F2FS__H) + +#define F2FS__H + +#include "util/libpartitionmanagerexport.h" + +#include "fs/filesystem.h" + +#include + +class Report; + +class QString; + +namespace FS +{ +/** A f2fs file system. + @author Andrius Štikonas +*/ +class LIBKPMCORE_EXPORT f2fs : public FileSystem +{ +public: + f2fs(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label); + +public: + static void init(); + +// virtual qint64 readUsedCapacity(const QString& deviceNode) const; + virtual bool check(Report& report, const QString& deviceNode) const; + virtual bool create(Report& report, const QString& deviceNode) const; +// virtual qint64 readUsedCapacity(const QString& deviceNode) const; +// virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; +// virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); +// virtual bool updateUUID(Report& report, const QString& deviceNode) const; + + virtual CommandSupportType supportGetUsed() const { + return m_GetUsed; + } + virtual CommandSupportType supportGetLabel() const { + return m_GetLabel; + } + virtual CommandSupportType supportCreate() const { + return m_Create; + } + virtual CommandSupportType supportGrow() const { + return m_Grow; + } + virtual CommandSupportType supportShrink() const { + return m_Shrink; + } + virtual CommandSupportType supportMove() const { + return m_Move; + } + virtual CommandSupportType supportCheck() const { + return m_Check; + } + virtual CommandSupportType supportCopy() const { + return m_Copy; + } + virtual CommandSupportType supportBackup() const { + return m_Backup; + } + virtual CommandSupportType supportSetLabel() const { + return m_SetLabel; + } + virtual CommandSupportType supportUpdateUUID() const { + return m_UpdateUUID; + } + virtual CommandSupportType supportGetUUID() const { + return m_GetUUID; + } + + virtual qint64 minCapacity() const; + virtual qint64 maxCapacity() const; + virtual qint64 maxLabelLength() const; + virtual SupportTool supportToolName() const; + virtual bool supportToolFound() const; + +public: + static CommandSupportType m_GetUsed; + static CommandSupportType m_GetLabel; + static CommandSupportType m_Create; + static CommandSupportType m_Grow; + static CommandSupportType m_Shrink; + static CommandSupportType m_Move; + static CommandSupportType m_Check; + static CommandSupportType m_Copy; + static CommandSupportType m_Backup; + static CommandSupportType m_SetLabel; + static CommandSupportType m_UpdateUUID; + static CommandSupportType m_GetUUID; +}; +} + +#endif