diff options
Diffstat (limited to 'src/actionparser.c')
-rw-r--r-- | src/actionparser.c | 61 |
1 files changed, 36 insertions, 25 deletions
diff --git a/src/actionparser.c b/src/actionparser.c index c8c70db..aee9732 100644 --- a/src/actionparser.c +++ b/src/actionparser.c @@ -148,7 +148,15 @@ int parse_SEARCH(UserOpt *opt) { } int parse_HELP(UserOpt *opt) { - return -1; + /* Help expects a maximum of 1 argument */ + if (optNum <= pos || optNum > pos + 1) { + opt->err = PERR_HELP_WRONG; + return -1; + } + + int arg_num = optNum - pos; + fill_args_list(arg_num, opt); + return 0; } @@ -164,26 +172,34 @@ int parse_vals(UserOpt *opt) { } } -void determine_action(UserOpt *opt) { - /* get action */ - if (next_token() == -1) { - opt->action = CK_WRONG_ACTION; - return; - } - +CkAction parser_get_action(const char *name, char *actionName) { int i; #define X(ACTION) \ for (i = 1; i < atoi(str##ACTION[0]) + 1; i++) { \ - if (strcmp(token, str##ACTION[i]) == 0) { \ - opt->action = CKA_##ACTION; \ - LOG("Action to perform: %s", str##ACTION[1]); \ - return; \ + if (strcmp(name, str##ACTION[i]) == 0) { \ + if (actionName) { \ + strcpy(actionName, str##ACTION[1]); \ + } \ + return CKA_##ACTION; \ } \ } CK_ACTIONS; #undef X + return CK_WRONG_ACTION; +} + +void determine_action(UserOpt *opt) { + /* get action */ + if (next_token() == -1) { + opt->action = CK_WRONG_ACTION; + return; + } - opt->action = CK_WRONG_ACTION; + char actionName[STR_S]; + opt->action = parser_get_action(token, actionName); + if (opt->action != CK_WRONG_ACTION) { + LOG("Action to perform: %s", actionName); + } return; } @@ -284,7 +300,7 @@ void verbose() { } void get_possible_action_strings(char *dest, CkAction ckAction) { - char buf[STR_S]; + char buf[STR_M]; switch (ckAction) { #define X(ACTION) \ case CKA_##ACTION: \ @@ -308,15 +324,15 @@ void get_possible_action_strings(char *dest, CkAction ckAction) { void print_parser_error(UserOpt *opt) { char errStr[STR_L]; - char names[STR_S]; + char names[STR_M]; get_possible_action_strings(names, opt->action); switch (opt->err) { case PERR_NOERR: return; case PERR_UNKONW_ACTION: - sprintf(errStr, "Unknown action: %s", token); - break; + ERR("Unknown action: %s", token); + return; case PERR_INIT_WRONG: sprintf(errStr, "Initialize database\nUsage: %s version_control_dir secret_dir", names); break; @@ -336,14 +352,13 @@ void print_parser_error(UserOpt *opt) { sprintf(errStr, "Search through the configs with grep\nUsage: %s search-term", names); break; case PERR_HELP_WRONG: - sprintf(errStr, "Usage: ........"); - break; + sprintf(errStr, "Get help for a ck action.\nUsage: %s action", names); } HELP("%s", errStr); } void print_parser_help() { - char names[STR_S]; + char names[STR_M]; ckhelp("ck - the config keeper"); ckhelp("Usage:"); get_possible_action_strings(names, CKA_INIT); @@ -359,7 +374,7 @@ void print_parser_help() { get_possible_action_strings(names, CKA_SEARCH); ckhelp("Search: \t%s", names); get_possible_action_strings(names, CKA_HELP); - ckhelp("Print this: \t%s", names); + ckhelp("Actions Help: \t%s", names); report_help(); } @@ -396,10 +411,6 @@ int parse_action(int argc, char* argv[], UserOpt *opt) { print_parser_error(opt); return -1; } - if (opt->action == CKA_HELP) { - print_parser_help(); - return -1; - } // parse values if (parse_vals(opt)) { |