}
-const Filesystem*
+ unique_ptr<const Filesystem>
get_filesystem(const ProxyConfig& config, const string& target_root)
{
const map<string, string>& raw = config.getAllValues();
string
username(uid_t uid);
-const Filesystem*
-get_filesystem(const ProxyConfig& config, const string& target_root);
+ unique_ptr<const Filesystem>
+ get_filesystem(const ProxyConfig& config, const string& target_root);
struct Differ
if (set_default)
{
ProxyConfig config = snapper->getConfig();
- const Filesystem* filesystem = get_filesystem(config, global_options.root());
+ unique_ptr<const Filesystem> filesystem = get_filesystem(config, global_options.root());
filesystem->setDefault(snapshot->getNum(), report);
}
}
ProxyConfig config = snapper->getConfig();
- const Filesystem* filesystem = get_filesystem(config, global_options.root());
+ unique_ptr<const Filesystem> filesystem = get_filesystem(config, global_options.root());
if (filesystem->fstype() != "btrfs")
{
cerr << _("Command 'rollback' only available for btrfs.") << endl;
Plugins::rollback(filesystem->snapshotDir(snapshot1->getNum()),
filesystem->snapshotDir(snapshot2->getNum()), report);
- Plugins::rollback(Plugins::Stage::POST_ACTION, subvolume, filesystem, snapshot1->getNum(),
- snapshot2->getNum(), report);
+ Plugins::rollback(Plugins::Stage::POST_ACTION, subvolume, filesystem.get(),
+ snapshot1->getNum(), snapshot2->getNum(), report);
if (print_number)
cout << snapshot2->getNum() << endl;
Plugins::rollback(filesystem->snapshotDir(previous_default->getNum()),
filesystem->snapshotDir(snapshot->getNum()), report);
- Plugins::rollback(Plugins::Stage::POST_ACTION, subvolume, filesystem, previous_default->getNum(),
- snapshot->getNum(), report);
+ Plugins::rollback(Plugins::Stage::POST_ACTION, subvolume, filesystem.get(),
+ previous_default->getNum(), snapshot->getNum(), report);
}
break;
using namespace BcachefsUtils;
- Filesystem*
+ std::unique_ptr<Filesystem>
Bcachefs::create(const string& fstype, const string& subvolume, const string& root_prefix)
{
if (fstype == "bcachefs")
- return new Bcachefs(subvolume, root_prefix);
+ return std::make_unique<Bcachefs>(subvolume, root_prefix);
return nullptr;
}
{
public:
- static Filesystem* create(const string& fstype, const string& subvolume,
- const string& root_prefix);
+ static std::unique_ptr<Filesystem> create(const string& fstype, const string& subvolume,
+ const string& root_prefix);
Bcachefs(const string& subvolume, const string& root_prefix);
using namespace std;
- Filesystem*
+ std::unique_ptr<Filesystem>
Btrfs::create(const string& fstype, const string& subvolume, const string& root_prefix)
{
if (fstype == "btrfs")
- return new Btrfs(subvolume, root_prefix);
+ return std::make_unique<Btrfs>(subvolume, root_prefix);
return nullptr;
}
{
public:
- static Filesystem* create(const string& fstype, const string& subvolume,
- const string& root_prefix);
+ static std::unique_ptr<Filesystem> create(const string& fstype, const string& subvolume,
+ const string& root_prefix);
Btrfs(const string& subvolume, const string& root_prefix);
namespace snapper
{
- Filesystem*
+ std::unique_ptr<Filesystem>
Ext4::create(const string& fstype, const string& subvolume, const string& root_prefix)
{
if (fstype == "ext4")
- return new Ext4(subvolume, root_prefix);
+ return std::make_unique<Ext4>(subvolume, root_prefix);
return nullptr;
}
{
public:
- static Filesystem* create(const string& fstype, const string& subvolume,
- const string& root_prefix);
+ static std::unique_ptr<Filesystem> create(const string& fstype, const string& subvolume,
+ const string& root_prefix);
Ext4(const string& subvolume, const string& root_prefix);
}
- Filesystem*
+ std::unique_ptr<Filesystem>
Filesystem::create(const string& fstype, const string& subvolume, const string& root_prefix)
{
- typedef Filesystem* (*func_t)(const string& fstype, const string& subvolume,
- const string& root_prefix);
+ typedef std::unique_ptr<Filesystem> (*func_t)(const string& fstype, const string& subvolume,
+ const string& root_prefix);
static const func_t funcs[] = {
#ifdef ENABLE_BTRFS
for (const func_t* func = funcs; *func != nullptr; ++func)
{
- Filesystem* fs = (*func)(fstype, subvolume, root_prefix);
+ std::unique_ptr<Filesystem> fs = (*func)(fstype, subvolume, root_prefix);
if (fs)
return fs;
}
}
- Filesystem*
+ std::unique_ptr<Filesystem>
Filesystem::create(const ConfigInfo& config_info, const string& root_prefix)
{
string fstype = "btrfs";
config_info.get_value(KEY_FSTYPE, fstype);
- Filesystem* fs = create(fstype, config_info.get_subvolume(), root_prefix);
+ std::unique_ptr<Filesystem> fs = create(fstype, config_info.get_subvolume(), root_prefix);
fs->evalConfigInfo(config_info);
#include <string>
#include <vector>
#include <utility>
+#include <memory>
#include "snapper/FileUtils.h"
#include "snapper/Compare.h"
: subvolume(subvolume), root_prefix(root_prefix) {}
virtual ~Filesystem() {}
- static Filesystem* create(const string& fstype, const string& subvolume, const string& root_prefix);
- static Filesystem* create(const ConfigInfo& config_info, const string& root_prefix);
+ static std::unique_ptr<Filesystem> create(const string& fstype, const string& subvolume,
+ const string& root_prefix);
+ static std::unique_ptr<Filesystem> create(const ConfigInfo& config_info, const string& root_prefix);
virtual void evalConfigInfo(const ConfigInfo& config_info) {}
using namespace std;
- Filesystem*
+ std::unique_ptr<Filesystem>
Lvm::create(const string& fstype, const string& subvolume, const string& root_prefix)
{
static const regex rx("lvm\\(([_a-z0-9]+)\\)", regex::extended);
smatch match;
if (regex_match(fstype, match, rx))
- return new Lvm(subvolume, root_prefix, match[1]);
+ return std::make_unique<Lvm>(subvolume, root_prefix, match[1]);
return nullptr;
}
{
public:
- static Filesystem* create(const string& fstype, const string& subvolume,
- const string& root_prefix);
+ static std::unique_ptr<Filesystem> create(const string& fstype, const string& subvolume,
+ const string& root_prefix);
Lvm(const string& subvolume, const string& root_prefix, const string& mount_type);
SN_CAUGHT(e);
}
}
-
- delete filesystem;
- filesystem = nullptr;
}
unique_ptr<Filesystem> filesystem;
try
{
- filesystem.reset(Filesystem::create(fstype, subvolume, ""));
+ filesystem = Filesystem::create(fstype, subvolume, "");
}
catch (const InvalidConfigException& e)
{
y2mil("Snapper delete-config");
y2mil("libsnapper version " VERSION);
- unique_ptr<Snapper> snapper(new Snapper(config_name, root_prefix));
+ unique_ptr<Snapper> snapper = make_unique<Snapper>(config_name, root_prefix);
Plugins::delete_config(Plugins::Stage::PRE_ACTION, snapper->subvolumeDir(), snapper->getFilesystem(),
report);
static bool detectFstype(const string& subvolume, string& fstype);
- const Filesystem* getFilesystem() const { return filesystem; }
-
const ConfigInfo& getConfigInfo() { return *config_info; }
void setConfigInfo(const map<string, string>& raw);
+ const Filesystem* getFilesystem() const { return filesystem.get(); }
+
void syncAcl() const;
void syncFilesystem() const;
std::unique_ptr<ConfigInfo> config_info;
- Filesystem* filesystem = nullptr;
+ std::unique_ptr<Filesystem> filesystem;
vector<string> ignore_patterns;
bool
cmp(const string& fstype, const string& subvolume, unsigned int num1, unsigned int num2)
{
- Filesystem* filesystem = Filesystem::create(fstype, subvolume, "/");
+ unique_ptr<Filesystem> filesystem = Filesystem::create(fstype, subvolume, "/");
SDir dir1 = filesystem->openSnapshotDir(num1);
SDir dir2 = filesystem->openSnapshotDir(num2);