--- /dev/null
+/*
+ * Copyright (c) [2011-2015] Novell, Inc.
+ * Copyright (c) [2016-2025] SUSE LLC
+ *
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as published
+ * by the Free Software Foundation.
+ *
+ * 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, contact Novell, Inc.
+ *
+ * To contact Novell about this file by physical or electronic mail, you may
+ * find current contact information at www.novell.com.
+ */
+
+
+#include "config.h"
+
+#include "snapper/ConfigInfo.h"
+#include "snapper/Exception.h"
+#include "snapper/SnapperDefines.h"
+#include "snapper/AppUtil.h"
+#include "snapper/Snapper.h"
+
+
+namespace snapper
+{
+ using namespace std;
+
+
+ ConfigInfo::ConfigInfo(const string& config_name, const string& root_prefix)
+ : SysconfigFile(prepend_root_prefix(root_prefix, CONFIGS_DIR "/" + config_name)),
+ config_name(config_name), root_prefix(root_prefix), subvolume("/")
+ {
+ if (!get_value(KEY_SUBVOLUME, subvolume))
+ SN_THROW(InvalidConfigException());
+ }
+
+
+ void
+ ConfigInfo::check_key(const string& key) const
+ {
+ if (key == KEY_SUBVOLUME || key == KEY_FSTYPE)
+ SN_THROW(InvalidConfigdataException());
+
+ try
+ {
+ SysconfigFile::check_key(key);
+ }
+ catch (const InvalidKeyException& e)
+ {
+ SN_CAUGHT(e);
+
+ SN_THROW(InvalidConfigdataException());
+ }
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) [2011-2015] Novell, Inc.
+ * Copyright (c) [2016-2025] SUSE LLC
+ *
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as published
+ * by the Free Software Foundation.
+ *
+ * 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, contact Novell, Inc.
+ *
+ * To contact Novell about this file by physical or electronic mail, you may
+ * find current contact information at www.novell.com.
+ */
+
+
+#ifndef SNAPPER_CONFIG_INFO_H
+#define SNAPPER_CONFIG_INFO_H
+
+
+#include "snapper/AsciiFile.h"
+
+
+namespace snapper
+{
+
+ class ConfigInfo : public SysconfigFile
+ {
+ public:
+
+ ConfigInfo(const std::string& config_name, const std::string& root_prefix);
+
+ const std::string& get_config_name() const { return config_name; }
+ const std::string& get_subvolume() const { return subvolume; }
+
+ virtual void check_key(const std::string& key) const override;
+
+ private:
+
+ const std::string config_name;
+ const std::string root_prefix;
+
+ std::string subvolume;
+
+ };
+
+}
+
+
+#endif
lib_LTLIBRARIES = libsnapper.la
libsnapper_la_SOURCES = \
+ ConfigInfo.cc ConfigInfo.h \
Snapper.cc Snapper.h \
Snapshot.cc Snapshot.h \
Comparison.cc Comparison.h \
pkginclude_HEADERS = \
Version.h \
+ ConfigInfo.h \
Snapper.h \
Snapshot.h \
Plugins.h \
using namespace std;
- ConfigInfo::ConfigInfo(const string& config_name, const string& root_prefix)
- : SysconfigFile(prepend_root_prefix(root_prefix, CONFIGS_DIR "/" + config_name)),
- config_name(config_name), subvolume("/")
- {
- if (!get_value(KEY_SUBVOLUME, subvolume))
- SN_THROW(InvalidConfigException());
- }
-
-
- void
- ConfigInfo::check_key(const string& key) const
- {
- if (key == KEY_SUBVOLUME || key == KEY_FSTYPE)
- SN_THROW(InvalidConfigdataException());
-
- try
- {
- SysconfigFile::check_key(key);
- }
- catch (const InvalidKeyException& e)
- {
- SN_CAUGHT(e);
-
- SN_THROW(InvalidConfigdataException());
- }
- }
-
-
Snapper::Snapper(const string& config_name, const string& root_prefix, bool disable_filters)
: config_name(config_name), root_prefix(root_prefix), snapshots(this)
{
try
{
- config_info = new ConfigInfo(config_name, root_prefix);
+ config_info = make_unique<ConfigInfo>(config_name, root_prefix);
}
catch (const Exception& e)
{
delete filesystem;
filesystem = nullptr;
-
- delete config_info;
- config_info = nullptr;
}
#define SNAPPER_SNAPPER_H
+#include <memory>
#include <vector>
#include <boost/noncopyable.hpp>
#include "snapper/Snapshot.h"
-#include "snapper/AsciiFile.h"
#include "snapper/Plugins.h"
+#include "snapper/ConfigInfo.h"
namespace snapper
{
- using std::vector;
-
class Filesystem;
class SDir;
class SelinuxLabelHandle;
- class ConfigInfo : public SysconfigFile
- {
- public:
-
- explicit ConfigInfo(const string& config_name, const string& root_prefix);
-
- const string& get_config_name() const { return config_name; }
- const string& get_subvolume() const { return subvolume; }
-
- virtual void check_key(const string& key) const override;
-
- private:
-
- const string config_name;
-
- string subvolume;
-
- };
-
-
struct ConfigNotFoundException : public Exception
{
explicit ConfigNotFoundException() : Exception("config not found") {}
const std::string config_name;
const std::string root_prefix;
- ConfigInfo* config_info = nullptr;
+ std::unique_ptr<ConfigInfo> config_info;
Filesystem* filesystem = nullptr;