X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=src%2Flib%2Fcmdline_parse_string.c;h=b99a278438e161572c76e650a905ccea0cebcd9e;hb=df9816e5e10b0552c7e29650ee21a79654af67ef;hp=1b9fdb8400bf036793a44957f72d1e4c262444b4;hpb=b1d5b169352e57df3fc14c51ffad4b83f3e5613f;p=libcmdline.git diff --git a/src/lib/cmdline_parse_string.c b/src/lib/cmdline_parse_string.c index 1b9fdb8..b99a278 100644 --- a/src/lib/cmdline_parse_string.c +++ b/src/lib/cmdline_parse_string.c @@ -67,13 +67,6 @@ #include "cmdline_parse.h" #include "cmdline_parse_string.h" -struct cmdline_token_ops cmdline_token_string_ops = { - .parse = cmdline_parse_string, - .complete_get_nb = cmdline_complete_get_nb_string, - .complete_get_elt = cmdline_complete_get_elt_string, - .get_help = cmdline_get_help_string, -}; - #define MULTISTRING_HELP "Mul-choice STRING" #define ANYSTRING_HELP "Any STRING" #define FIXEDSTRING_HELP "Fixed STRING" @@ -102,8 +95,9 @@ get_next_token(const char *s) return NULL; } -static int parse_fixed_string(struct cmdline_token_string_data *sd, - const char *buf, unsigned token_len) +static int +parse_fixed_string(struct cmdline_token_string_data *sd, + const char *buf, unsigned token_len) { unsigned int conf_token_len; const char *str; @@ -126,7 +120,7 @@ static int parse_fixed_string(struct cmdline_token_string_data *sd, return -1; } -int +static int cmdline_parse_string(cmdline_parse_token_hdr_t *tk, const char *buf, void *res, unsigned ressize) { @@ -155,38 +149,33 @@ cmdline_parse_string(cmdline_parse_token_hdr_t *tk, const char *buf, void *res, return token_len; } -int cmdline_complete_get_nb_string(cmdline_parse_token_hdr_t *tk) +static int +cmdline_complete_string_start(cmdline_parse_token_hdr_t *tk, + __attribute__((unused)) const char *tokstr, + void **opaque) { struct cmdline_token_string *tk2 = (struct cmdline_token_string *)tk; struct cmdline_token_string_data *sd = &tk2->string_data;; - int ret=1; const char *str; - if (!sd->str) - return 0; - str = sd->str; - while( (str = get_next_token(str)) != NULL ) { - ret++; - } - return ret; + *opaque = (void *)str; + if (str == NULL) + return -1; /* no completion */ + return 0; } -int cmdline_complete_get_elt_string(cmdline_parse_token_hdr_t *tk, int idx, - char *dstbuf, unsigned int size) +static int +cmdline_complete_string_iterate(cmdline_parse_token_hdr_t *tk, void **opaque, + char *dstbuf, unsigned int size) { - struct cmdline_token_string *tk2 = (struct cmdline_token_string *)tk; - struct cmdline_token_string_data *sd = &tk2->string_data;; const char *s; unsigned int len; - s = sd->str; - - while (idx-- && s) - s = get_next_token(s); - - if (!s) + s = *opaque; + if (s == NULL) return -1; + *opaque = (void *)get_next_token(s); len = get_token_len(s); if (len > size - 1) @@ -197,9 +186,9 @@ int cmdline_complete_get_elt_string(cmdline_parse_token_hdr_t *tk, int idx, return 0; } - -int cmdline_get_help_string(cmdline_parse_token_hdr_t *tk, char *dstbuf, - unsigned int size) +static int +cmdline_help_string(cmdline_parse_token_hdr_t *tk, char *dstbuf, + unsigned int size) { struct cmdline_token_string *tk2 = (struct cmdline_token_string *)tk; struct cmdline_token_string_data *sd = &tk2->string_data;; @@ -207,13 +196,11 @@ int cmdline_get_help_string(cmdline_parse_token_hdr_t *tk, char *dstbuf, s = sd->str; - if (s) { - if (get_next_token(s)) { + if (s != NULL) { + if (get_next_token(s)) strncpy(dstbuf, MULTISTRING_HELP, size); - } - else { + else strncpy(dstbuf, FIXEDSTRING_HELP, size); - } } else { strncpy(dstbuf, ANYSTRING_HELP, size); @@ -223,3 +210,11 @@ int cmdline_get_help_string(cmdline_parse_token_hdr_t *tk, char *dstbuf, return 0; } + +struct cmdline_token_ops cmdline_token_string_ops = { + .parse = cmdline_parse_string, + .complete_start = cmdline_complete_string_start, + .complete_iterate = cmdline_complete_string_iterate, + .complete_end = NULL, + .help = cmdline_help_string, +};