git.droids-corp.org
/
libcmdline.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cmdline: big rework and clean of cmdline library
[libcmdline.git]
/
src
/
extension_example
/
parse_obj_list.c
diff --git
a/src/extension_example/parse_obj_list.c
b/src/extension_example/parse_obj_list.c
index
aa743cf
..
d561519
100644
(file)
--- a/
src/extension_example/parse_obj_list.c
+++ b/
src/extension_example/parse_obj_list.c
@@
-37,16
+37,10
@@
#include "parse_obj_list.h"
/* This file is an example of extension of libcmdline. It provides an
#include "parse_obj_list.h"
/* This file is an example of extension of libcmdline. It provides an
- * example of objects stored in a list. */
+ * example of named objects stored in a list, supporting the
+ * completion on objects name */
-struct cmdline_token_ops token_obj_list_ops = {
- .parse = parse_obj_list,
- .complete_get_nb = complete_get_nb_obj_list,
- .complete_get_elt = complete_get_elt_obj_list,
- .get_help = get_help_obj_list,
-};
-
-int
+static int
parse_obj_list(cmdline_parse_token_hdr_t *tk, const char *buf, void *res,
unsigned ressize)
{
parse_obj_list(cmdline_parse_token_hdr_t *tk, const char *buf, void *res,
unsigned ressize)
{
@@
-65,7
+59,7
@@
parse_obj_list(cmdline_parse_token_hdr_t *tk, const char *buf, void *res,
continue;
break;
}
continue;
break;
}
- if (
!o
) /* not found */
+ if (
o == NULL
) /* not found */
return -1;
/* store the address of object in structure */
return -1;
/* store the address of object in structure */
@@
-75,45
+69,54
@@
parse_obj_list(cmdline_parse_token_hdr_t *tk, const char *buf, void *res,
return token_len;
}
return token_len;
}
-int complete_get_nb_obj_list(cmdline_parse_token_hdr_t *tk)
+static int
+complete_obj_list_start(cmdline_parse_token_hdr_t *tk, void **opaque)
{
struct token_obj_list *tk2 = (struct token_obj_list *)tk;
struct token_obj_list_data *tkd = &tk2->obj_list_data;
struct object *o;
{
struct token_obj_list *tk2 = (struct token_obj_list *)tk;
struct token_obj_list_data *tkd = &tk2->obj_list_data;
struct object *o;
- int ret = 0;
- SLIST_FOREACH(o, tkd->list, next) {
- ret ++;
- }
- return ret;
+ o = SLIST_FIRST(tkd->list);
+ *opaque = (void *)o;
+ if (o == NULL)
+ return -1; /* no completion */
+ return 0;
}
}
-int complete_get_elt_obj_list(cmdline_parse_token_hdr_t *tk, int idx,
- char *dstbuf, unsigned int size)
+static int
+complete_obj_list_iterate(cmdline_parse_token_hdr_t *tk, void **opaque,
+ char *dstbuf, unsigned int size)
{
{
- struct token_obj_list *tk2 = (struct token_obj_list *)tk;
- struct token_obj_list_data *tkd = &tk2->obj_list_data;
struct object *o;
struct object *o;
-
unsigned int i = 0,
len;
+
int
len;
- SLIST_FOREACH(o, tkd->list, next) {
- if (i++ == idx)
- break;
- }
- if (!o)
+ o = *opaque;
+ if (o == NULL)
return -1;
return -1;
- len = s
trlen(o->name) + 1
;
- if (len
>
size)
+ len = s
nprintf(dstbuf, size, "%s", o->name)
;
+ if (len
< 0 || len >=
size)
return -1;
strcpy(dstbuf, o->name);
return -1;
strcpy(dstbuf, o->name);
+ o = SLIST_NEXT(o, next);
+ *opaque = o;
return 0;
}
return 0;
}
-int get_help_obj_list(cmdline_parse_token_hdr_t *tk, char *dstbuf, unsigned int size)
+static int
+cmdline_help_obj_list(cmdline_parse_token_hdr_t *tk, char *dstbuf,
+ unsigned int size)
{
snprintf(dstbuf, size, "Obj-List");
return 0;
}
{
snprintf(dstbuf, size, "Obj-List");
return 0;
}
+
+struct cmdline_token_ops token_obj_list_ops = {
+ .parse = parse_obj_list,
+ .complete_start = complete_obj_list_start,
+ .complete_iterate = complete_obj_list_iterate,
+ .complete_end = NULL,
+ .help = cmdline_help_obj_list,
+};