| 1113 | CLIOptions() = default; |
| 1114 | |
| 1115 | void parseArgsInternal(int argc, char* argv[]) { |
| 1116 | for (int a = 0; a < argc; a++) { |
| 1117 | if (a) |
| 1118 | commandLine += ' '; |
| 1119 | commandLine += argv[a]; |
| 1120 | } |
| 1121 | |
| 1122 | CSimpleOpt args(argc, argv, g_rgOptions, SO_O_EXACT | SO_O_HYPHEN_TO_UNDERSCORE); |
| 1123 | |
| 1124 | if (argc == 1) { |
| 1125 | printUsage(argv[0], false); |
| 1126 | flushAndExit(FDB_EXIT_ERROR); |
| 1127 | } |
| 1128 | |
| 1129 | while (args.Next()) { |
| 1130 | if (args.LastError() == SO_ARG_INVALID_DATA) { |
| 1131 | fprintf(stderr, "ERROR: invalid argument to option `%s'\n", args.OptionText()); |
| 1132 | printHelpTeaser(argv[0]); |
| 1133 | flushAndExit(FDB_EXIT_ERROR); |
| 1134 | } |
| 1135 | if (args.LastError() == SO_ARG_INVALID) { |
| 1136 | fprintf(stderr, "ERROR: argument given for option `%s'\n", args.OptionText()); |
| 1137 | printHelpTeaser(argv[0]); |
| 1138 | flushAndExit(FDB_EXIT_ERROR); |
| 1139 | } |
| 1140 | if (args.LastError() == SO_ARG_MISSING) { |
| 1141 | fprintf(stderr, "ERROR: missing argument for option `%s'\n", args.OptionText()); |
| 1142 | printHelpTeaser(argv[0]); |
| 1143 | flushAndExit(FDB_EXIT_ERROR); |
| 1144 | } |
| 1145 | if (args.LastError() == SO_OPT_INVALID) { |
| 1146 | fprintf(stderr, "ERROR: unknown option: `%s'\n", args.OptionText()); |
| 1147 | printHelpTeaser(argv[0]); |
| 1148 | flushAndExit(FDB_EXIT_ERROR); |
| 1149 | } |
| 1150 | if (args.LastError() != SO_SUCCESS) { |
| 1151 | fprintf(stderr, "ERROR: error parsing options\n"); |
| 1152 | printHelpTeaser(argv[0]); |
| 1153 | flushAndExit(FDB_EXIT_ERROR); |
| 1154 | } |
| 1155 | const char* sRole; |
| 1156 | Optional<uint64_t> ti; |
| 1157 | std::string argStr; |
| 1158 | std::vector<std::string> tmpStrings; |
| 1159 | |
| 1160 | switch (args.OptionId()) { |
| 1161 | case OPT_HELP: |
| 1162 | printUsage(argv[0], false); |
| 1163 | flushAndExit(FDB_EXIT_SUCCESS); |
| 1164 | break; |
| 1165 | case OPT_DEVHELP: |
| 1166 | printUsage(argv[0], true); |
| 1167 | flushAndExit(FDB_EXIT_SUCCESS); |
| 1168 | break; |
| 1169 | case OPT_PRINT_CODE_PROBES: |
| 1170 | probe::ICodeProbe::printProbesJSON({ std::string(args.OptionArg()) }); |
| 1171 | flushAndExit(FDB_EXIT_SUCCESS); |
| 1172 | break; |
no test coverage detected