From: Arvin Schnell Date: Thu, 24 Jul 2025 16:34:07 +0000 (+0200) Subject: - move ConfigInfo to own file and use unique_ptr X-Git-Tag: v0.13.0~26^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=23f138ff2b9a5876a875ea0fca785b0ad5a40a07;p=thirdparty%2Fsnapper.git - move ConfigInfo to own file and use unique_ptr --- diff --git a/snapper/ConfigInfo.cc b/snapper/ConfigInfo.cc new file mode 100644 index 00000000..67788c2a --- /dev/null +++ b/snapper/ConfigInfo.cc @@ -0,0 +1,65 @@ +/* + * 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()); + } + } + +} diff --git a/snapper/ConfigInfo.h b/snapper/ConfigInfo.h new file mode 100644 index 00000000..c038c29d --- /dev/null +++ b/snapper/ConfigInfo.h @@ -0,0 +1,57 @@ +/* + * 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 diff --git a/snapper/Makefile.am b/snapper/Makefile.am index 6941061f..94a5cb77 100644 --- a/snapper/Makefile.am +++ b/snapper/Makefile.am @@ -7,6 +7,7 @@ AM_CXXFLAGS = -D_FILE_OFFSET_BITS=64 lib_LTLIBRARIES = libsnapper.la libsnapper_la_SOURCES = \ + ConfigInfo.cc ConfigInfo.h \ Snapper.cc Snapper.h \ Snapshot.cc Snapshot.h \ Comparison.cc Comparison.h \ @@ -86,6 +87,7 @@ pkgincludedir = $(includedir)/snapper pkginclude_HEADERS = \ Version.h \ + ConfigInfo.h \ Snapper.h \ Snapshot.h \ Plugins.h \ diff --git a/snapper/Snapper.cc b/snapper/Snapper.cc index 2a9e35e2..6d86cb6a 100644 --- a/snapper/Snapper.cc +++ b/snapper/Snapper.cc @@ -63,34 +63,6 @@ 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), 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) { @@ -101,7 +73,7 @@ namespace snapper try { - config_info = new ConfigInfo(config_name, root_prefix); + config_info = make_unique(config_name, root_prefix); } catch (const Exception& e) { @@ -154,9 +126,6 @@ namespace snapper delete filesystem; filesystem = nullptr; - - delete config_info; - config_info = nullptr; } diff --git a/snapper/Snapper.h b/snapper/Snapper.h index a43f8aaa..df4e841f 100644 --- a/snapper/Snapper.h +++ b/snapper/Snapper.h @@ -25,44 +25,23 @@ #define SNAPPER_SNAPPER_H +#include #include #include #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") {} @@ -217,7 +196,7 @@ namespace snapper const std::string config_name; const std::string root_prefix; - ConfigInfo* config_info = nullptr; + std::unique_ptr config_info; Filesystem* filesystem = nullptr;