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