MCPcopy Create free account
hub / github.com/dobin/RedEdr / parse_args

Function parse_args

RedEdrShared/loguru.cpp:473–524  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

471 }
472
473 static void parse_args(int& argc, char* argv[], const char* verbosity_flag)
474 {
475 int arg_dest = 1;
476 int out_argc = argc;
477
478 for (int arg_it = 1; arg_it < argc; ++arg_it) {
479 auto cmd = argv[arg_it];
480 auto arg_len = strlen(verbosity_flag);
481
482 bool last_is_alpha = false;
483#if LOGURU_USE_LOCALE
484 try { // locale variant of isalpha will throw on error
485 last_is_alpha = std::isalpha(cmd[arg_len], std::locale(""));
486 }
487 catch (...) {
488 last_is_alpha = std::isalpha(static_cast<int>(cmd[arg_len]));
489 }
490#else
491 last_is_alpha = std::isalpha(static_cast<int>(cmd[arg_len]));
492#endif
493
494 if (strncmp(cmd, verbosity_flag, arg_len) == 0 && !last_is_alpha) {
495 out_argc -= 1;
496 auto value_str = cmd + arg_len;
497 if (value_str[0] == '\0') {
498 // Value in separate argument
499 arg_it += 1;
500 CHECK_LT_F(arg_it, argc, "Missing verbosiy level after " LOGURU_FMT(s) "", verbosity_flag);
501 value_str = argv[arg_it];
502 out_argc -= 1;
503 }
504 if (*value_str == '=') { value_str += 1; }
505
506 auto req_verbosity = get_verbosity_from_name(value_str);
507 if (req_verbosity != Verbosity_INVALID) {
508 g_stderr_verbosity = req_verbosity;
509 }
510 else {
511 char* end = 0;
512 g_stderr_verbosity = static_cast<int>(strtol(value_str, &end, 10));
513 CHECK_F(end && *end == '\0',
514 "Invalid verbosity. Expected integer, INFO, WARNING, ERROR or OFF, got '" LOGURU_FMT(s) "'", value_str);
515 }
516 }
517 else {
518 argv[arg_dest++] = argv[arg_it];
519 }
520 }
521
522 argc = out_argc;
523 argv[argc] = nullptr;
524 }
525
526 static long long now_ns()
527 {

Callers 1

initFunction · 0.85

Calls 1

get_verbosity_from_nameFunction · 0.85

Tested by

no test coverage detected