From f4d2dec628edae884ae7c5ac5ace99b8dbbb7949 Mon Sep 17 00:00:00 2001 From: XMRig <support@xmrig.com> Date: Fri, 15 Feb 2019 05:42:46 +0700 Subject: [PATCH] Added classes Process and Arguments. --- CMakeLists.txt | 4 ++ src/App.cpp | 24 +++---- src/App.h | 24 ++++--- src/App_unix.cpp | 5 +- src/App_win.cpp | 5 +- src/base/kernel/Process.cpp | 101 +++++++++++++++++++++++++++++ src/base/kernel/Process.h | 64 ++++++++++++++++++ src/base/tools/Arguments.cpp | 76 ++++++++++++++++++++++ src/base/tools/Arguments.h | 61 +++++++++++++++++ src/common/Platform.cpp | 35 +--------- src/common/Platform.h | 8 +-- src/common/config/ConfigLoader.cpp | 7 +- src/common/config/ConfigLoader.h | 3 +- src/core/Config.cpp | 4 +- src/core/Config.h | 7 +- src/core/Controller.cpp | 12 ++-- src/core/Controller.h | 5 +- src/xmrig.cpp | 10 ++- 18 files changed, 373 insertions(+), 82 deletions(-) create mode 100644 src/base/kernel/Process.cpp create mode 100644 src/base/kernel/Process.h create mode 100644 src/base/tools/Arguments.cpp create mode 100644 src/base/tools/Arguments.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3eb8a0fcf..238a9b7f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,8 @@ set(HEADERS src/base/io/Watcher.h src/base/kernel/interfaces/IConfigListener.h src/base/kernel/interfaces/IWatcherListener.h + src/base/kernel/Process.h + src/base/tools/Arguments.h src/base/tools/Handle.h src/base/tools/String.h src/common/config/CommonConfig.h @@ -104,6 +106,8 @@ set(SOURCES src/App.cpp src/base/io/Json.cpp src/base/io/Watcher.cpp + src/base/kernel/Process.cpp + src/base/tools/Arguments.cpp src/base/tools/Handle.cpp src/base/tools/String.cpp src/common/config/CommonConfig.cpp diff --git a/src/App.cpp b/src/App.cpp index e3c4c222d..d6ed7190e 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -5,7 +5,9 @@ * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> * Copyright 2016 Jay D Dee <jayddee246@gmail.com> * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> - * Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * Copyright 2018 Lee Clagett <https://github.com/vtnerd> + * Copyright 2018 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,18 +49,18 @@ #endif -App *App::m_self = nullptr; +xmrig::App *xmrig::App::m_self = nullptr; -App::App(int argc, char **argv) : +xmrig::App::App(Process *process) : m_console(nullptr), m_httpd(nullptr) { m_self = this; - m_controller = new xmrig::Controller(); - if (m_controller->init(argc, argv) != 0) { + m_controller = new xmrig::Controller(process); + if (m_controller->init() != 0) { return; } @@ -72,7 +74,7 @@ App::App(int argc, char **argv) : } -App::~App() +xmrig::App::~App() { uv_tty_reset_mode(); @@ -85,7 +87,7 @@ App::~App() } -int App::exec() +int xmrig::App::exec() { if (m_controller->isDone()) { return 0; @@ -139,7 +141,7 @@ int App::exec() } -void App::onConsoleCommand(char command) +void xmrig::App::onConsoleCommand(char command) { switch (command) { case 'h': @@ -174,7 +176,7 @@ void App::onConsoleCommand(char command) } -void App::close() +void xmrig::App::close() { m_controller->network()->stop(); Workers::stop(); @@ -183,12 +185,12 @@ void App::close() } -void App::release() +void xmrig::App::release() { } -void App::onSignal(uv_signal_t *handle, int signum) +void xmrig::App::onSignal(uv_signal_t *handle, int signum) { switch (signum) { diff --git a/src/App.h b/src/App.h index 964400e6b..b93fc4a1d 100644 --- a/src/App.h +++ b/src/App.h @@ -5,7 +5,9 @@ * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> * Copyright 2016 Jay D Dee <jayddee246@gmail.com> * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> - * Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * Copyright 2018 Lee Clagett <https://github.com/vtnerd> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,8 +23,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef __APP_H__ -#define __APP_H__ +#ifndef XMRIG_APP_H +#define XMRIG_APP_H #include <uv.h> @@ -34,19 +36,20 @@ class Console; class Httpd; class Network; -class Options; namespace xmrig { - class Controller; -} + + +class Controller; +class Process; class App : public IConsoleListener { public: - App(int argc, char **argv); - ~App(); + App(Process *process); + ~App() override; int exec(); @@ -71,4 +74,7 @@ private: }; -#endif /* __APP_H__ */ +} /* namespace xmrig */ + + +#endif /* XMRIG_APP_H */ diff --git a/src/App_unix.cpp b/src/App_unix.cpp index 45f73d2dc..2b598c229 100644 --- a/src/App_unix.cpp +++ b/src/App_unix.cpp @@ -5,7 +5,8 @@ * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> * Copyright 2016 Jay D Dee <jayddee246@gmail.com> * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> - * Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,7 +35,7 @@ #include "core/Controller.h" -void App::background() +void xmrig::App::background() { signal(SIGPIPE, SIG_IGN); diff --git a/src/App_win.cpp b/src/App_win.cpp index 9b923870e..57f57a6df 100644 --- a/src/App_win.cpp +++ b/src/App_win.cpp @@ -5,7 +5,8 @@ * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> * Copyright 2016 Jay D Dee <jayddee246@gmail.com> * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> - * Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,7 +32,7 @@ #include "core/Config.h" -void App::background() +void xmrig::App::background() { if (!m_controller->config()->isBackground()) { return; diff --git a/src/base/kernel/Process.cpp b/src/base/kernel/Process.cpp new file mode 100644 index 000000000..0bc40e2da --- /dev/null +++ b/src/base/kernel/Process.cpp @@ -0,0 +1,101 @@ +/* XMRig + * Copyright 2010 Jeff Garzik <jgarzik@pobox.com> + * Copyright 2012-2014 pooler <pooler@litecoinpool.org> + * Copyright 2014 Lucas Jones <https://github.com/lucasjones> + * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> + * Copyright 2016 Jay D Dee <jayddee246@gmail.com> + * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * 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, see <http://www.gnu.org/licenses/>. + */ + + +#include <uv.h> +#include <time.h> + + +#include "base/kernel/Process.h" + + +static size_t location(xmrig::Process::Location location, char *buf, size_t max) +{ + using namespace xmrig; + + size_t size = max; + if (location == Process::ExeLocation) { + return uv_exepath(buf, &size) < 0 ? 0 : size; + } + + if (location == Process::CwdLocation) { + return uv_cwd(buf, &size) < 0 ? 0 : size; + } + + return 0; +} + + +xmrig::Process::Process(int argc, char **argv) : + m_arguments(argc, argv) +{ + srand(static_cast<unsigned int>(static_cast<uintptr_t>(time(nullptr)) ^ reinterpret_cast<uintptr_t>(this))); +} + + +xmrig::Process::~Process() +{ +} + + +xmrig::String xmrig::Process::location(Location location, const char *fileName) const +{ + constexpr const size_t max = 520; + + char *buf = new char[max](); + size_t size = ::location(location, buf, max); + + if (size == 0) { + delete [] buf; + + return String(); + } + + if (fileName == nullptr) { + return buf; + } + + if (location == ExeLocation) { + char *p = strrchr(buf, kDirSeparator); + + if (p == nullptr) { + delete [] buf; + + return String(); + } + + size = static_cast<size_t>(p - buf); + } + + if ((size + strlen(fileName) + 2) >= max) { + delete [] buf; + + return String(); + } + + buf[size] = kDirSeparator; + strcpy(buf + size + 1, fileName); + + return buf; +} diff --git a/src/base/kernel/Process.h b/src/base/kernel/Process.h new file mode 100644 index 000000000..9b29eb57f --- /dev/null +++ b/src/base/kernel/Process.h @@ -0,0 +1,64 @@ +/* XMRig + * Copyright 2010 Jeff Garzik <jgarzik@pobox.com> + * Copyright 2012-2014 pooler <pooler@litecoinpool.org> + * Copyright 2014 Lucas Jones <https://github.com/lucasjones> + * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> + * Copyright 2016 Jay D Dee <jayddee246@gmail.com> + * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef XMRIG_PROCESS_H +#define XMRIG_PROCESS_H + + +#include "base/tools/Arguments.h" + + +namespace xmrig { + + +class Process +{ +public: + enum Location { + ExeLocation, + CwdLocation + }; + +# ifdef WIN32 + constexpr const static char kDirSeparator = '\\'; +# else + constexpr const static char kDirSeparator = '/'; +# endif + + Process(int argc, char **argv); + ~Process(); + + String location(Location location, const char *fileName = nullptr) const; + + inline const Arguments &arguments() const { return m_arguments; } + +private: + Arguments m_arguments; +}; + + +} /* namespace xmrig */ + + +#endif /* XMRIG_PROCESS_H */ diff --git a/src/base/tools/Arguments.cpp b/src/base/tools/Arguments.cpp new file mode 100644 index 000000000..3713dd116 --- /dev/null +++ b/src/base/tools/Arguments.cpp @@ -0,0 +1,76 @@ +/* XMRig + * Copyright 2010 Jeff Garzik <jgarzik@pobox.com> + * Copyright 2012-2014 pooler <pooler@litecoinpool.org> + * Copyright 2014 Lucas Jones <https://github.com/lucasjones> + * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> + * Copyright 2016 Jay D Dee <jayddee246@gmail.com> + * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * 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, see <http://www.gnu.org/licenses/>. + */ + + +#include <algorithm> +#include <uv.h> + + +#include "base/tools/Arguments.h" + + +xmrig::Arguments::Arguments(int argc, char **argv) : + m_argv(argv), + m_argc(argc) +{ + uv_setup_args(argc, argv); + + for (size_t i = 0; i < static_cast<size_t>(argc); ++i) { + add(argv[i]); + } +} + + +bool xmrig::Arguments::hasArg(const char *name) const +{ + if (m_argc == 1) { + return false; + } + + return std::find(m_data.begin() + 1, m_data.end(), name) != m_data.end(); +} + + +void xmrig::Arguments::add(const char *arg) +{ + if (arg == nullptr) { + return; + } + + const size_t size = strlen(arg); + if (size > 4 && arg[0] == '-' && arg[1] == '-') { + const char *p = strstr(arg, "="); + + if (p) { + const size_t keySize = static_cast<size_t>(p - arg); + + m_data.push_back(String(arg, keySize)); + m_data.push_back(arg + keySize + 1); + + return; + } + } + + m_data.push_back(arg); +} diff --git a/src/base/tools/Arguments.h b/src/base/tools/Arguments.h new file mode 100644 index 000000000..e47e39e38 --- /dev/null +++ b/src/base/tools/Arguments.h @@ -0,0 +1,61 @@ +/* XMRig + * Copyright 2010 Jeff Garzik <jgarzik@pobox.com> + * Copyright 2012-2014 pooler <pooler@litecoinpool.org> + * Copyright 2014 Lucas Jones <https://github.com/lucasjones> + * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> + * Copyright 2016 Jay D Dee <jayddee246@gmail.com> + * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef XMRIG_ARGUMENTS_H +#define XMRIG_ARGUMENTS_H + + +#include <vector> + + +#include "base/tools/String.h" + + +namespace xmrig { + + +class Arguments +{ +public: + Arguments(int argc, char **argv); + + bool hasArg(const char *name) const; + + inline char **argv() const { return m_argv; } + inline const std::vector<String> &data() const { return m_data; } + inline int argc() const { return m_argc; } + +private: + void add(const char *arg); + + char **m_argv; + int m_argc; + std::vector<String> m_data; +}; + + +} /* namespace xmrig */ + + +#endif /* XMRIG_ARGUMENTS_H */ diff --git a/src/common/Platform.cpp b/src/common/Platform.cpp index 17fcc38e6..6bd0ac80d 100644 --- a/src/common/Platform.cpp +++ b/src/common/Platform.cpp @@ -5,8 +5,8 @@ * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> * Copyright 2016 Jay D Dee <jayddee246@gmail.com> * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> - * Copyright 2018 SChernykh <https://github.com/SChernykh> - * Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,40 +36,9 @@ #include "Platform.h" -char Platform::m_defaultConfigName[520] = { 0 }; xmrig::String Platform::m_userAgent; -const char *Platform::defaultConfigName() -{ - size_t size = 520; - - if (*m_defaultConfigName) { - return m_defaultConfigName; - } - - if (uv_exepath(m_defaultConfigName, &size) < 0) { - return nullptr; - } - - if (size < 500) { -# ifdef WIN32 - char *p = strrchr(m_defaultConfigName, '\\'); -# else - char *p = strrchr(m_defaultConfigName, '/'); -# endif - - if (p) { - strcpy(p + 1, "config.json"); - return m_defaultConfigName; - } - } - - *m_defaultConfigName = '\0'; - return nullptr; -} - - void Platform::init(const char *userAgent) { # ifndef XMRIG_NO_TLS diff --git a/src/common/Platform.h b/src/common/Platform.h index fc10e83b3..85f08a2eb 100644 --- a/src/common/Platform.h +++ b/src/common/Platform.h @@ -5,8 +5,8 @@ * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> * Copyright 2016 Jay D Dee <jayddee246@gmail.com> * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> - * Copyright 2018 SChernykh <https://github.com/SChernykh> - * Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,19 +36,17 @@ class Platform { public: static bool setThreadAffinity(uint64_t cpu_id); - static const char *defaultConfigName(); static uint32_t setTimerResolution(uint32_t resolution); static void init(const char *userAgent); static void restoreTimerResolution(); static void setProcessPriority(int priority); static void setThreadPriority(int priority); - static inline const char *userAgent() { return m_userAgent.data(); } + static inline const char *userAgent() { return m_userAgent; } private: static char *createUserAgent(); - static char m_defaultConfigName[520]; static xmrig::String m_userAgent; }; diff --git a/src/common/config/ConfigLoader.cpp b/src/common/config/ConfigLoader.cpp index c60953a12..42c93f5c3 100644 --- a/src/common/config/ConfigLoader.cpp +++ b/src/common/config/ConfigLoader.cpp @@ -40,6 +40,7 @@ #include "base/io/Json.h" #include "base/kernel/interfaces/IConfigListener.h" +#include "base/kernel/Process.h" #include "common/config/ConfigLoader.h" #include "common/config/ConfigWatcher.h" #include "common/interfaces/IConfig.h" @@ -144,13 +145,15 @@ bool xmrig::ConfigLoader::reload(xmrig::IConfig *oldConfig, const char *json) } -xmrig::IConfig *xmrig::ConfigLoader::load(int argc, char **argv, IConfigCreator *creator, IConfigListener *listener) +xmrig::IConfig *xmrig::ConfigLoader::load(Process *process, IConfigCreator *creator, IConfigListener *listener) { m_creator = creator; m_listener = listener; xmrig::IConfig *config = m_creator->create(); int key; + int argc = process->arguments().argc(); + char **argv = process->arguments().argv(); while (1) { key = getopt_long(argc, argv, short_options, options, nullptr); @@ -174,7 +177,7 @@ xmrig::IConfig *xmrig::ConfigLoader::load(int argc, char **argv, IConfigCreator delete config; config = m_creator->create(); - loadFromFile(config, Platform::defaultConfigName()); + loadFromFile(config, process->location(Process::ExeLocation, "config.json")); } if (!config->finalize()) { diff --git a/src/common/config/ConfigLoader.h b/src/common/config/ConfigLoader.h index 13ac357bf..0a85ab944 100644 --- a/src/common/config/ConfigLoader.h +++ b/src/common/config/ConfigLoader.h @@ -42,6 +42,7 @@ class ConfigWatcher; class IConfigCreator; class IConfigListener; class IConfig; +class Process; class ConfigLoader @@ -51,7 +52,7 @@ public: static bool loadFromJSON(IConfig *config, const char *json); static bool loadFromJSON(IConfig *config, const rapidjson::Document &doc); static bool reload(IConfig *oldConfig, const char *json); - static IConfig *load(int argc, char **argv, IConfigCreator *creator, IConfigListener *listener); + static IConfig *load(Process *process, IConfigCreator *creator, IConfigListener *listener); static void release(); static inline bool isDone() { return m_done; } diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 1decb9410..f54f092b7 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -139,9 +139,9 @@ void xmrig::Config::getJSON(rapidjson::Document &doc) const } -xmrig::Config *xmrig::Config::load(int argc, char **argv, IConfigListener *listener) +xmrig::Config *xmrig::Config::load(Process *process, IConfigListener *listener) { - return static_cast<Config*>(ConfigLoader::load(argc, argv, new ConfigCreator(), listener)); + return static_cast<Config*>(ConfigLoader::load(process, new ConfigCreator(), listener)); } diff --git a/src/core/Config.h b/src/core/Config.h index 5b40a47e4..d2e8c166e 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -35,16 +35,13 @@ #include "workers/CpuThread.h" -class Addr; -class Url; - - namespace xmrig { class ConfigLoader; class IThread; class IConfigListener; +class Process; /** @@ -85,7 +82,7 @@ public: inline int64_t affinity() const { return m_threads.mask; } inline ThreadsMode threadsMode() const { return m_threads.mode; } - static Config *load(int argc, char **argv, IConfigListener *listener); + static Config *load(Process *process, IConfigListener *listener); protected: bool finalize() override; diff --git a/src/core/Controller.cpp b/src/core/Controller.cpp index b9c64ca1c..1113c6d5d 100644 --- a/src/core/Controller.cpp +++ b/src/core/Controller.cpp @@ -46,8 +46,9 @@ class xmrig::ControllerPrivate { public: - inline ControllerPrivate() : + inline ControllerPrivate(Process *process) : network(nullptr), + process(process), config(nullptr) {} @@ -60,13 +61,14 @@ public: Network *network; + Process *process; std::vector<xmrig::IControllerListener *> listeners; xmrig::Config *config; }; -xmrig::Controller::Controller() - : d_ptr(new ControllerPrivate()) +xmrig::Controller::Controller(Process *process) + : d_ptr(new ControllerPrivate(process)) { } @@ -99,11 +101,11 @@ xmrig::Config *xmrig::Controller::config() const } -int xmrig::Controller::init(int argc, char **argv) +int xmrig::Controller::init() { Cpu::init(); - d_ptr->config = xmrig::Config::load(argc, argv, this); + d_ptr->config = xmrig::Config::load(d_ptr->process, this); if (!d_ptr->config) { return 1; } diff --git a/src/core/Controller.h b/src/core/Controller.h index 199343734..7bb34db2f 100644 --- a/src/core/Controller.h +++ b/src/core/Controller.h @@ -39,18 +39,19 @@ namespace xmrig { class Config; class ControllerPrivate; class IControllerListener; +class Process; class Controller : public IConfigListener { public: - Controller(); + Controller(Process *process); ~Controller() override; bool isDone() const; bool isReady() const; Config *config() const; - int init(int argc, char **argv); + int init(); Network *network() const; void addListener(IControllerListener *listener); diff --git a/src/xmrig.cpp b/src/xmrig.cpp index 48362adaa..eec5f5faf 100644 --- a/src/xmrig.cpp +++ b/src/xmrig.cpp @@ -4,8 +4,9 @@ * Copyright 2014 Lucas Jones <https://github.com/lucasjones> * Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet> * Copyright 2016 Jay D Dee <jayddee246@gmail.com> - * Copyright 2016-2017 XMRig <support@xmrig.com> - * + * Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> + * Copyright 2018-2019 SChernykh <https://github.com/SChernykh> + * Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,10 +23,13 @@ */ #include "App.h" +#include "base/kernel/Process.h" int main(int argc, char **argv) { - App app(argc, argv); + xmrig::Process process(argc, argv); + + xmrig::App app(&process); return app.exec(); }