1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*d30ea906Sjfb8856606  * Copyright(c) 2010-2014 Intel Corporation.
3a9643ea8Slogwang  * Copyright (c) 2009, Olivier MATZ <[email protected]>
4a9643ea8Slogwang  * All rights reserved.
5a9643ea8Slogwang  */
6a9643ea8Slogwang 
7a9643ea8Slogwang #ifndef _PARSE_OBJ_LIST_H_
8a9643ea8Slogwang #define _PARSE_OBJ_LIST_H_
9a9643ea8Slogwang 
10a9643ea8Slogwang /* This file is an example of extension of libcmdline. It provides an
11a9643ea8Slogwang  * example of objects stored in a list. */
12a9643ea8Slogwang 
13a9643ea8Slogwang #include <sys/queue.h>
14a9643ea8Slogwang #include <cmdline_parse.h>
15a9643ea8Slogwang 
16a9643ea8Slogwang #define OBJ_NAME_LEN_MAX 64
17a9643ea8Slogwang 
18a9643ea8Slogwang struct object {
19a9643ea8Slogwang 	SLIST_ENTRY(object) next;
20a9643ea8Slogwang 	char name[OBJ_NAME_LEN_MAX];
21a9643ea8Slogwang 	cmdline_ipaddr_t ip;
22a9643ea8Slogwang };
23a9643ea8Slogwang 
24a9643ea8Slogwang /* define struct object_list */
25a9643ea8Slogwang SLIST_HEAD(object_list, object);
26a9643ea8Slogwang 
27a9643ea8Slogwang /* data is a pointer to a list */
28a9643ea8Slogwang struct token_obj_list_data {
29a9643ea8Slogwang 	struct object_list *list;
30a9643ea8Slogwang };
31a9643ea8Slogwang 
32a9643ea8Slogwang struct token_obj_list {
33a9643ea8Slogwang 	struct cmdline_token_hdr hdr;
34a9643ea8Slogwang 	struct token_obj_list_data obj_list_data;
35a9643ea8Slogwang };
36a9643ea8Slogwang typedef struct token_obj_list parse_token_obj_list_t;
37a9643ea8Slogwang 
38a9643ea8Slogwang extern struct cmdline_token_ops token_obj_list_ops;
39a9643ea8Slogwang 
40a9643ea8Slogwang int parse_obj_list(cmdline_parse_token_hdr_t *tk, const char *srcbuf, void *res,
41a9643ea8Slogwang 	unsigned ressize);
42a9643ea8Slogwang int complete_get_nb_obj_list(cmdline_parse_token_hdr_t *tk);
43a9643ea8Slogwang int complete_get_elt_obj_list(cmdline_parse_token_hdr_t *tk, int idx,
44a9643ea8Slogwang 			      char *dstbuf, unsigned int size);
45a9643ea8Slogwang int get_help_obj_list(cmdline_parse_token_hdr_t *tk, char *dstbuf, unsigned int size);
46a9643ea8Slogwang 
47a9643ea8Slogwang #define TOKEN_OBJ_LIST_INITIALIZER(structure, field, obj_list_ptr)  \
48a9643ea8Slogwang {								    \
49a9643ea8Slogwang 	.hdr = {						    \
50a9643ea8Slogwang 		.ops = &token_obj_list_ops,			    \
51a9643ea8Slogwang 		.offset = offsetof(structure, field),		    \
52a9643ea8Slogwang 	},							    \
53a9643ea8Slogwang 		.obj_list_data = {				    \
54a9643ea8Slogwang 		.list = obj_list_ptr,				    \
55a9643ea8Slogwang 	},							    \
56a9643ea8Slogwang }
57a9643ea8Slogwang 
58a9643ea8Slogwang #endif /* _PARSE_OBJ_LIST_H_ */
59