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_STRING_H_
8a9643ea8Slogwang #define _PARSE_STRING_H_
9a9643ea8Slogwang 
10a9643ea8Slogwang #include <cmdline_parse.h>
11a9643ea8Slogwang 
12a9643ea8Slogwang #ifdef __cplusplus
13a9643ea8Slogwang extern "C" {
14a9643ea8Slogwang #endif
15a9643ea8Slogwang 
16a9643ea8Slogwang /* size of a parsed string */
17a9643ea8Slogwang #define STR_TOKEN_SIZE 128
18a9643ea8Slogwang 
19a9643ea8Slogwang /* size of a parsed multi string */
20a9643ea8Slogwang #define STR_MULTI_TOKEN_SIZE 4096
21a9643ea8Slogwang 
22a9643ea8Slogwang typedef char cmdline_fixed_string_t[STR_TOKEN_SIZE];
23a9643ea8Slogwang 
24a9643ea8Slogwang typedef char cmdline_multi_string_t[STR_MULTI_TOKEN_SIZE];
25a9643ea8Slogwang 
26a9643ea8Slogwang struct cmdline_token_string_data {
27a9643ea8Slogwang 	const char *str;
28a9643ea8Slogwang };
29a9643ea8Slogwang 
30a9643ea8Slogwang struct cmdline_token_string {
31a9643ea8Slogwang 	struct cmdline_token_hdr hdr;
32a9643ea8Slogwang 	struct cmdline_token_string_data string_data;
33a9643ea8Slogwang };
34a9643ea8Slogwang typedef struct cmdline_token_string cmdline_parse_token_string_t;
35a9643ea8Slogwang 
36a9643ea8Slogwang extern struct cmdline_token_ops cmdline_token_string_ops;
37a9643ea8Slogwang 
38a9643ea8Slogwang int cmdline_parse_string(cmdline_parse_token_hdr_t *tk, const char *srcbuf,
39a9643ea8Slogwang 	void *res, unsigned ressize);
40a9643ea8Slogwang int cmdline_complete_get_nb_string(cmdline_parse_token_hdr_t *tk);
41a9643ea8Slogwang int cmdline_complete_get_elt_string(cmdline_parse_token_hdr_t *tk, int idx,
42a9643ea8Slogwang 				    char *dstbuf, unsigned int size);
43a9643ea8Slogwang int cmdline_get_help_string(cmdline_parse_token_hdr_t *tk, char *dstbuf,
44a9643ea8Slogwang 			    unsigned int size);
45a9643ea8Slogwang 
46a9643ea8Slogwang /**
47a9643ea8Slogwang * Token marked as TOKEN_STRING_MULTI takes entire parsing string
48a9643ea8Slogwang * until “#” sign appear. Everything after “#” sign is treated as a comment.
49a9643ea8Slogwang *
50a9643ea8Slogwang * Note:
51a9643ea8Slogwang * In this case second parameter of TOKEN_STRING_INITIALIZER must be a type of
52a9643ea8Slogwang * cmdline_multi_string_t.
53a9643ea8Slogwang */
54a9643ea8Slogwang #define TOKEN_STRING_MULTI ""
55a9643ea8Slogwang 
56a9643ea8Slogwang #define TOKEN_STRING_INITIALIZER(structure, field, string)  \
57a9643ea8Slogwang {                                                           \
58a9643ea8Slogwang 	/* hdr */                                               \
59a9643ea8Slogwang 	{                                                       \
60a9643ea8Slogwang 		&cmdline_token_string_ops,      /* ops */           \
61a9643ea8Slogwang 		offsetof(structure, field),     /* offset */        \
62a9643ea8Slogwang 	},                                                      \
63a9643ea8Slogwang 	/* string_data */                                       \
64a9643ea8Slogwang 	{                                                       \
65a9643ea8Slogwang 		string,                         /* str */           \
66a9643ea8Slogwang 	},                                                      \
67a9643ea8Slogwang }
68a9643ea8Slogwang 
69a9643ea8Slogwang #ifdef __cplusplus
70a9643ea8Slogwang }
71a9643ea8Slogwang #endif
72a9643ea8Slogwang 
73a9643ea8Slogwang #endif /* _PARSE_STRING_H_ */
74