/// \brief Parse the --verbose commandline argument and set the verbose level /// \param arg the commandline argument following "--verbose" /// \return an exit code. GENERIC_EXIT_OK if all is well. int verboseArgParse(QString arg) { QString option; int idx; if (!verboseInitialized) verboseInit(); QMutexLocker locker(&verboseMapMutex); verboseMask = verboseDefaultInt; verboseString = QString(verboseDefaultStr); if (arg.startsWith('-')) { cerr << "Invalid or missing argument to -v/--verbose option\n"; return GENERIC_EXIT_INVALID_CMDLINE; } QStringList verboseOpts = arg.split(QRegExp("[^\\w:]+", Qt::CaseInsensitive, QRegExp::RegExp2)); for (QStringList::Iterator it = verboseOpts.begin(); it != verboseOpts.end(); ++it ) { option = (*it).toLower(); bool reverseOption = false; QString optionLevel; if (option != "none" && option.startsWith("no")) { reverseOption = true; option = option.right(option.length() - 2); } if (option == "help") { verboseHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } else if (option == "important") { cerr << "The \"important\" log mask is no longer valid.\n"; } else if (option == "extra") { cerr << "The \"extra\" log mask is no longer valid. Please try " "--loglevel debug instead.\n"; } else if (option == "default") { if (haveUserDefaultValues) { verboseMask = userDefaultValueInt; verboseString = userDefaultValueStr; } else { verboseMask = verboseDefaultInt; verboseString = QString(verboseDefaultStr); } } else { if ((idx = option.indexOf(':')) != -1) { optionLevel = option.mid(idx + 1); option = option.left(idx); } VerboseDef *item = verboseMap.value(option); if (item) { if (reverseOption) { verboseMask &= ~(item->mask); verboseString = verboseString.remove(' ' + item->name); verboseString += " no" + item->name; } else { if (item->additive) { if (!(verboseMask & item->mask)) { verboseMask |= item->mask; verboseString += ' ' + item->name; } } else { verboseMask = item->mask; verboseString = item->name; } if (!optionLevel.isEmpty()) { LogLevel_t level = logLevelGet(optionLevel); if (level != LOG_UNKNOWN) componentLogLevel[item->mask] = level; } } } else { cerr << "Unknown argument for -v/--verbose: " << option.toLocal8Bit().constData() << endl;; return GENERIC_EXIT_INVALID_CMDLINE; } } } if (!haveUserDefaultValues) { haveUserDefaultValues = true; userDefaultValueInt = verboseMask; userDefaultValueStr = verboseString; } return GENERIC_EXIT_OK; }
int verboseArgParse(QString arg) { QString option; if (!verboseInitialized) verboseInit(); QMutexLocker locker(&verboseMapMutex); verboseMask = verboseDefaultInt; verboseString = QString(verboseDefaultStr); if (arg.startsWith('-')) { cerr << "Invalid or missing argument to -v/--verbose option\n"; return GENERIC_EXIT_INVALID_CMDLINE; } QStringList verboseOpts = arg.split(QRegExp("\\W+")); for (QStringList::Iterator it = verboseOpts.begin(); it != verboseOpts.end(); ++it ) { option = (*it).toLower(); bool reverseOption = false; if (option != "none" && option.left(2) == "no") { reverseOption = true; option = option.right(option.length() - 2); } if (option == "help") { verboseHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } else if (option == "important") { cerr << "The \"important\" log mask is no longer valid.\n"; } else if (option == "extra") { cerr << "The \"extra\" log mask is no longer valid. Please try --loglevel debug instead.\n"; } else if (option == "default") { if (haveUserDefaultValues) { verboseMask = userDefaultValueInt; verboseString = userDefaultValueStr; } else { verboseMask = verboseDefaultInt; verboseString = QString(verboseDefaultStr); } } else { VerboseDef *item = verboseMap.value(option); if (item) { if (reverseOption) { verboseMask &= ~(item->mask); verboseString = verboseString.remove(' ' + item->name); verboseString += " no" + item->name; } else { if (item->additive) { if (!(verboseMask & item->mask)) { verboseMask |= item->mask; verboseString += ' ' + item->name; } } else { verboseMask = item->mask; verboseString = item->name; } } } else { cerr << "Unknown argument for -v/--verbose: " << option.toLocal8Bit().constData() << endl;; return GENERIC_EXIT_INVALID_CMDLINE; } } } if (!haveUserDefaultValues) { haveUserDefaultValues = true; userDefaultValueInt = verboseMask; userDefaultValueStr = verboseString; } return GENERIC_EXIT_OK; }