added custom argument parser
This commit is contained in:
parent
d96bc26b97
commit
866f0f1874
1 changed files with 79 additions and 3 deletions
80
main.cpp
80
main.cpp
|
@ -75,6 +75,62 @@ void catchUnixSignals(std::initializer_list<int> quitSignals) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
QStringList parseStringArguments(const QString &string)
|
||||||
|
{
|
||||||
|
QString argument;
|
||||||
|
bool slashMode = false;
|
||||||
|
bool dQuoteMode = false;
|
||||||
|
bool sQuoteMode = false;
|
||||||
|
QStringList argumentList;
|
||||||
|
for (const QChar &strChar : string) {
|
||||||
|
if (!slashMode && !dQuoteMode && !sQuoteMode) {
|
||||||
|
if (strChar == ' ') {
|
||||||
|
if (!argument.isEmpty()) {
|
||||||
|
argumentList << argument;
|
||||||
|
argument.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strChar == '\"') {
|
||||||
|
dQuoteMode = true;
|
||||||
|
}
|
||||||
|
else if (strChar == '\'') {
|
||||||
|
sQuoteMode = true;
|
||||||
|
}
|
||||||
|
else if (strChar == '\\') {
|
||||||
|
slashMode = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
argument += strChar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (slashMode) {
|
||||||
|
argument += strChar;
|
||||||
|
slashMode = false;
|
||||||
|
}
|
||||||
|
else if (dQuoteMode) {
|
||||||
|
if (strChar == '\"') {
|
||||||
|
dQuoteMode = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
argument += strChar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (sQuoteMode) {
|
||||||
|
if (strChar == '\'') {
|
||||||
|
sQuoteMode = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
argument += strChar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (slashMode || dQuoteMode || sQuoteMode)
|
||||||
|
return QStringList();
|
||||||
|
if (!argument.isEmpty())
|
||||||
|
argumentList << argument;
|
||||||
|
return argumentList;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QCoreApplication a(argc, argv);
|
QCoreApplication a(argc, argv);
|
||||||
|
@ -112,7 +168,17 @@ int main(int argc, char *argv[])
|
||||||
argumentList = arguments;
|
argumentList = arguments;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Not yet
|
if (likely(!envExecutable.isEmpty())) {
|
||||||
|
executable = QString::fromUtf8(envExecutable);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (likely(!envArguments.isEmpty())) {
|
||||||
|
argumentList = parseStringArguments(QString::fromUtf8(envArguments));
|
||||||
|
if (argumentList.empty()) {
|
||||||
|
QTextStream(stderr) << "Arguments can't be parsed properly!" << smsub_endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(!envTimeout.isEmpty())) {
|
if (unlikely(!envTimeout.isEmpty())) {
|
||||||
|
@ -339,9 +405,19 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (unlikely(commandLineParser.isSet(processArguments))) {
|
else if (unlikely(commandLineParser.isSet(processArguments))) {
|
||||||
QTextStream(stderr) << "Arguments over command line are not supported yet!" << smsub_endl;
|
argumentList = parseStringArguments(commandLineParser.value(processArguments));
|
||||||
|
if (argumentList.empty()) {
|
||||||
|
QTextStream(stderr) << "Arguments can't be parsed properly!" << smsub_endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if (unlikely(!envArguments.isEmpty())) {
|
||||||
|
argumentList = parseStringArguments(QString::fromUtf8(envArguments));
|
||||||
|
if (argumentList.empty()) {
|
||||||
|
QTextStream(stderr) << "Arguments can't be parsed properly!" << smsub_endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (likely(commandLineParser.isSet(subprocessSocket))) {
|
if (likely(commandLineParser.isSet(subprocessSocket))) {
|
||||||
socket = commandLineParser.value(subprocessSocket);
|
socket = commandLineParser.value(subprocessSocket);
|
||||||
|
|
Loading…
Reference in a new issue