From: Arvin Schnell Date: Wed, 4 Jan 2023 09:13:19 +0000 (+0100) Subject: - use RAII for json tokener X-Git-Tag: v0.10.5~72^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0a1dce84d5bdef5975c33ace64fabbffa6525a22;p=thirdparty%2Fsnapper.git - use RAII for json tokener --- diff --git a/zypp-plugin/snapper-zypp-plugin.cc b/zypp-plugin/snapper-zypp-plugin.cc index 07611d24..511d527c 100644 --- a/zypp-plugin/snapper-zypp-plugin.cc +++ b/zypp-plugin/snapper-zypp-plugin.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) [2019-2021] SUSE LLC + * Copyright (c) [2019-2023] SUSE LLC * * All Rights Reserved. * @@ -19,20 +19,16 @@ * find current contact information at www.suse.com. */ -// getenv #include -// getppid #include #include -// split -#include - #include #include #include #include #include +#include using namespace std; @@ -301,14 +297,39 @@ object_get(json_object* obj, const char* name) } +class JsonTokener +{ +public: + + JsonTokener() + : p(json_tokener_new()) + { + if (!p) + throw runtime_error("out of memory"); + } + + ~JsonTokener() + { + json_tokener_free(p); + } + + json_tokener* get() { return p; } + +private: + + json_tokener* p; + +}; + + set SnapperZyppPlugin::get_solvables(const Message& msg, Phase phase) { set result; - json_tokener * tok = json_tokener_new(); - json_object * zypp = json_tokener_parse_ex(tok, msg.body.c_str(), msg.body.size()); - json_tokener_error jerr = json_tokener_get_error(tok); + JsonTokener tokener; + json_object* zypp = json_tokener_parse_ex(tokener.get(), msg.body.c_str(), msg.body.size()); + json_tokener_error jerr = json_tokener_get_error(tokener.get()); if (jerr != json_tokener_success) { cerr << "ERROR:" << "parsing zypp JSON failed: " << json_tokener_error_desc(jerr) << endl;