diff --git a/include/defer.h b/include/defer.h new file mode 100644 index 0000000..6e3da1d --- /dev/null +++ b/include/defer.h @@ -0,0 +1,16 @@ +#pragma once + +// from: https://www.gingerbill.org/article/2015/08/19/defer-in-cpp/ + +#include + +struct privDefer { + std::function f; + privDefer(std::function f) : f(f) {} + ~privDefer() { f(); } +}; + +#define DEFER_1(x, y) x##y +#define DEFER_2(x, y) DEFER_1(x, y) +#define DEFER_3(x) DEFER_2(x, __COUNTER__) +#define defer(code) auto DEFER_3(_defer_) = privDefer([&](){code;}) diff --git a/include/settingstab.h b/include/settingstab.h index 8f2203d..8d235e6 100644 --- a/include/settingstab.h +++ b/include/settingstab.h @@ -47,7 +47,7 @@ private: Config::PositionConfig* conf; DataDragon* dd = nullptr; - Position position; + Position position = Position::INVALID; }; #endif // SETTINGSTAB_H diff --git a/lolautoaccept.pro b/lolautoaccept.pro index 0d7d374..a22dd79 100644 --- a/lolautoaccept.pro +++ b/lolautoaccept.pro @@ -60,6 +60,7 @@ HEADERS += \ include/config.h \ include/datadragon.h \ include/datadragonimagecache.h \ + include/defer.h \ include/files.h \ include/json.h \ include/lolautoaccept.h \ diff --git a/src/clientaccess.cpp b/src/clientaccess.cpp index 48fcaff..1e952ad 100644 --- a/src/clientaccess.cpp +++ b/src/clientaccess.cpp @@ -16,6 +16,8 @@ #include +#include "defer.h" + static bool endsWith(const std::string& all, const std::string& end) { return all.rfind(end) == all.size() - end.size(); } @@ -42,6 +44,8 @@ std::shared_ptr ClientAccess::find(bool uselockfile) { DIR* procdir = opendir("/proc"); if(!procdir) return nullptr; + defer( closedir(procdir) ); + dirent* entry = nullptr; while ((entry = readdir(procdir)) != NULL) { if (entry->d_type != DT_DIR) continue; @@ -82,8 +86,6 @@ std::shared_ptr ClientAccess::find(bool uselockfile) { } } - closedir(procdir); - return nullptr; }