Parse arg refactoring #4124
Extracted platform specific argument parsing code.
This commit is contained in:
parent
326901ef86
commit
d2814a423c
|
@ -26,6 +26,7 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#define CLOG (CLog::getInstance())
|
#define CLOG (CLog::getInstance())
|
||||||
|
#define BYE "\nTry `%s --help' for more information."
|
||||||
|
|
||||||
class ILogOutputter;
|
class ILogOutputter;
|
||||||
class CThread;
|
class CThread;
|
||||||
|
|
|
@ -125,8 +125,6 @@ private:
|
||||||
CSocketMultiplexer* m_socketMultiplexer;
|
CSocketMultiplexer* m_socketMultiplexer;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BYE "\nTry `%s --help' for more information."
|
|
||||||
|
|
||||||
#if WINAPI_MSWINDOWS
|
#if WINAPI_MSWINDOWS
|
||||||
#define DAEMON_RUNNING(running_) CArchMiscWindows::daemonRunning(running_)
|
#define DAEMON_RUNNING(running_) CArchMiscWindows::daemonRunning(running_)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2014 Synergy Si, inc.
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package 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 "synergy/ArgParser.h"
|
||||||
|
|
||||||
|
#include "synergy/ArgsBase.h"
|
||||||
|
#include "base/Log.h"
|
||||||
|
|
||||||
|
CArgsBase* CArgParser::m_argsBase = NULL;
|
||||||
|
|
||||||
|
bool
|
||||||
|
CArgParser::parsePlatformArg(CArgsBase& argsBase, const int& argc, const char* const* argv, int& i)
|
||||||
|
{
|
||||||
|
#if WINAPI_MSWINDOWS
|
||||||
|
if (isArg(i, argc, argv, NULL, "--service")) {
|
||||||
|
LOG((CLOG_WARN "obsolete argument --service, use synergyd instead."));
|
||||||
|
argsBase.m_shouldExit = true;
|
||||||
|
}
|
||||||
|
else if (isArg(i, argc, argv, NULL, "--exit-pause")) {
|
||||||
|
argsBase.m_pauseOnExit = true;
|
||||||
|
}
|
||||||
|
else if (isArg(i, argc, argv, NULL, "--stop-on-desk-switch")) {
|
||||||
|
argsBase.m_stopOnDeskSwitch = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// option not supported here
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#elif WINAPI_XWINDOWS
|
||||||
|
if (CArgumentParser::isArg(i, argc, argv, "-display", "--display", 1)) {
|
||||||
|
// use alternative display
|
||||||
|
argsBase.m_display = argv[++i];
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (CArgumentParser::isArg(i, argc, argv, NULL, "--no-xinitthreads")) {
|
||||||
|
argsBase.m_disableXInitThreads = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
// option not supported here
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#elif WINAPI_CARBON
|
||||||
|
// no options for carbon
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CArgParser::isArg(
|
||||||
|
int argi, int argc, const char* const* argv,
|
||||||
|
const char* name1, const char* name2,
|
||||||
|
int minRequiredParameters)
|
||||||
|
{
|
||||||
|
if ((name1 != NULL && strcmp(argv[argi], name1) == 0) ||
|
||||||
|
(name2 != NULL && strcmp(argv[argi], name2) == 0)) {
|
||||||
|
// match. check args left.
|
||||||
|
if (argi + minRequiredParameters >= argc) {
|
||||||
|
LOG((CLOG_PRINT "%s: missing arguments for `%s'" BYE,
|
||||||
|
argsBase().m_pname, argv[argi], argsBase().m_pname));
|
||||||
|
argsBase().m_shouldExit = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no match
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2014 Synergy Si, Inc.
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "base/String.h"
|
||||||
|
#include "common/stdvector.h"
|
||||||
|
|
||||||
|
class CArgsBase;
|
||||||
|
|
||||||
|
class CArgParser {
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool parsePlatformArg(CArgsBase& argsBase, const int& argc, const char* const* argv, int& i);
|
||||||
|
|
||||||
|
static bool isArg(int argi, int argc, const char* const* argv,
|
||||||
|
const char* name1, const char* name2,
|
||||||
|
int minRequiredParameters = 0);
|
||||||
|
private:
|
||||||
|
static CArgsBase& argsBase() { return *m_argsBase; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
static CArgsBase* m_argsBase;
|
||||||
|
};
|
|
@ -39,7 +39,8 @@ m_logFile(NULL),
|
||||||
m_display(NULL),
|
m_display(NULL),
|
||||||
m_disableTray(false),
|
m_disableTray(false),
|
||||||
m_enableIpc(false),
|
m_enableIpc(false),
|
||||||
m_enableDragDrop(false)
|
m_enableDragDrop(false),
|
||||||
|
m_shouldExit(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,4 +46,5 @@ public:
|
||||||
#if WINAPI_XWINDOWS
|
#if WINAPI_XWINDOWS
|
||||||
bool m_disableXInitThreads;
|
bool m_disableXInitThreads;
|
||||||
#endif
|
#endif
|
||||||
|
bool m_shouldExit;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue