MCPcopy Create free account
hub / github.com/AGWA/git-crypt / parse_options

Function parse_options

parse_options.cpp:42–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40}
41
42int parse_options (const Options_list& options, int argc, const char** argv)
43{
44 int argi = 0;
45
46 while (argi < argc && argv[argi][0] == '-' && argv[argi][1] != '\0') {
47 if (std::strcmp(argv[argi], "--") == 0) {
48 ++argi;
49 break;
50 } else if (std::strncmp(argv[argi], "--", 2) == 0) {
51 std::string option_name;
52 const char* option_value = 0;
53 if (const char* eq = std::strchr(argv[argi], '=')) {
54 option_name.assign(argv[argi], eq);
55 option_value = eq + 1;
56 } else {
57 option_name = argv[argi];
58 }
59 ++argi;
60
61 const Option_def* opt(find_option(options, option_name));
62 if (!opt) {
63 throw Option_error(option_name, "Invalid option");
64 }
65
66 if (opt->is_set) {
67 *opt->is_set = true;
68 }
69 if (opt->value) {
70 if (option_value) {
71 *opt->value = option_value;
72 } else {
73 if (argi >= argc) {
74 throw Option_error(option_name, "Option requires a value");
75 }
76 *opt->value = argv[argi];
77 ++argi;
78 }
79 } else {
80 if (option_value) {
81 throw Option_error(option_name, "Option takes no value");
82 }
83 }
84 } else {
85 const char* arg = argv[argi] + 1;
86 ++argi;
87 while (*arg) {
88 std::string option_name("-");
89 option_name.push_back(*arg);
90 ++arg;
91
92 const Option_def* opt(find_option(options, option_name));
93 if (!opt) {
94 throw Option_error(option_name, "Invalid option");
95 }
96 if (opt->is_set) {
97 *opt->is_set = true;
98 }
99 if (opt->value) {

Callers 6

parse_plumbing_optionsFunction · 0.85
initFunction · 0.85
lockFunction · 0.85
add_gpg_userFunction · 0.85
export_keyFunction · 0.85
statusFunction · 0.85

Calls 1

Option_errorClass · 0.85

Tested by

no test coverage detected