Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: nucleo_ucmd_helloworld
Diff: ucArgOptOwner.c
- Revision:
- 0:9e2fc73e5a12
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ucArgOptOwner.c Mon Oct 12 21:09:07 2015 +0000
@@ -0,0 +1,72 @@
+#include "ucmd_internal.h"
+
+ucArgOpt *ucArgOptOwner_get_arg_opt(ucArgOptOwner *p) {
+ if (NULL == p) return NULL;
+ return p->arg_opt;
+}
+
+ucArgOptOwner *ucArgOptOwner_init(ucArgOptOwner *p, const char *name, const char *desc, ucBool is_required, ucArgOpt *arg_opt) {
+ if (NULL == p) return NULL;
+ if (NULL == ucOpt_init((ucOpt*)p, name, desc, is_required)) return NULL;
+ p->arg_opt = arg_opt;
+ return p;
+}
+
+const char *ucArgOptOwner_format_validation_err(ucArgOptOwner *p, ucCmdLine *cmd, ucArgTok *arg_tok, const char *switch_name) {
+ int max_arg_tok_count;
+
+ /* set the prefix for error messages */
+ const char *validation, *prefix = switch_name == NULL ? ucOpt_validation_err_invalid_argument_prefix : ucOpt_validation_err_invalid_switch_argument_prefix;
+
+ /* get the first argument option */
+ ucArgOpt *arg_opt = ucArgOptOwner_get_arg_opt(p);
+
+ /* check if an argument option does NOT exist */
+ if (NULL == arg_opt) {
+
+ /* check if the argumen token DOES exist */
+ if (NULL != arg_tok) {
+
+ /* the option does NOT exist, but the token DOES, so there's an error */
+ return NULL == switch_name
+ ? ucCmdLine_format_response(cmd, "%sno argument options exist for command \"%s\".", prefix, ucTok_get_value(ucCmdLine_get_cmd_tok(cmd)))
+ : ucCmdLine_format_response(cmd, "%sno argument options exist for switch \"%s\".", prefix, switch_name);
+ }
+
+ /* neither the option nor the token exist, so no error here */
+ return NULL;
+ }
+
+ /* loop through all the argument options */
+ max_arg_tok_count = 0;
+ while (NULL != arg_opt) {
+
+ /* validate this argument option agains the current token */
+ validation = ucArgOpt_format_validation_err(arg_opt, cmd, arg_tok, switch_name);
+ if (NULL != validation) return validation;
+
+ /* get the number of tokens that this option allows */
+ max_arg_tok_count = ucArgOpt_get_max_tok_count(arg_opt);
+
+ /* move to the next option and the next token */
+ arg_opt = ucArgOpt_get_next(arg_opt);
+ arg_tok = ucArgTok_get_next(arg_tok);
+ }
+
+ /* check if we have any remaining tokens */
+ if (NULL != arg_tok) {
+
+ /* check if the last argument option does NOT allow multiple tokens */
+ if (2 > max_arg_tok_count) {
+
+ /* we have remaining tokens but no arguments for them, so there's an error */
+ return NULL == switch_name
+ ? ucCmdLine_format_response(cmd, "%sno option exists for argument \"%s\".", prefix, ucTok_get_value(arg_tok))
+ : ucCmdLine_format_response(cmd, "%sno option exists for \"%s\" argument \"%s\".", prefix, switch_name, ucTok_get_value(arg_tok));
+ }
+ }
+
+ /* return no error */
+ return NULL;
+}
+