mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-11 03:31:36 +00:00
MINOR: cli: add a function to look up a CLI service description
This function will be useful to check if the keyword is already registered. Also add a define for the max number of args. This will be needed by a next patch to fix a bug and will have to be backported.
This commit is contained in:
parent
87e539906b
commit
a51a1fd174
@ -42,6 +42,8 @@
|
|||||||
#define APPCTX_CLI_ST1_PAYLOAD (1 << 1)
|
#define APPCTX_CLI_ST1_PAYLOAD (1 << 1)
|
||||||
#define APPCTX_CLI_ST1_NOLF (1 << 2)
|
#define APPCTX_CLI_ST1_NOLF (1 << 2)
|
||||||
|
|
||||||
|
#define CLI_PREFIX_KW_NB 5
|
||||||
|
|
||||||
/* CLI states */
|
/* CLI states */
|
||||||
enum {
|
enum {
|
||||||
CLI_ST_INIT = 0, /* initial state, must leave to zero ! */
|
CLI_ST_INIT = 0, /* initial state, must leave to zero ! */
|
||||||
@ -66,7 +68,7 @@ enum {
|
|||||||
|
|
||||||
|
|
||||||
struct cli_kw {
|
struct cli_kw {
|
||||||
const char *str_kw[5]; /* keywords ended by NULL, limited to 5
|
const char *str_kw[CLI_PREFIX_KW_NB]; /* keywords ended by NULL, limited to CLI_PREFIX_KW_NB
|
||||||
separated keywords combination */
|
separated keywords combination */
|
||||||
const char *usage; /* usage message */
|
const char *usage; /* usage message */
|
||||||
int (*parse)(char **args, char *payload, struct appctx *appctx, void *private);
|
int (*parse)(char **args, char *payload, struct appctx *appctx, void *private);
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
|
|
||||||
void cli_register_kw(struct cli_kw_list *kw_list);
|
void cli_register_kw(struct cli_kw_list *kw_list);
|
||||||
|
struct cli_kw* cli_find_kw_exact(char **args);
|
||||||
|
|
||||||
int cli_has_level(struct appctx *appctx, int level);
|
int cli_has_level(struct appctx *appctx, int level);
|
||||||
|
|
||||||
|
33
src/cli.c
33
src/cli.c
@ -182,6 +182,39 @@ struct cli_kw* cli_find_kw(char **args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct cli_kw* cli_find_kw_exact(char **args)
|
||||||
|
{
|
||||||
|
struct cli_kw_list *kw_list;
|
||||||
|
int found = 0;
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
if (LIST_ISEMPTY(&cli_keywords.list))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
list_for_each_entry(kw_list, &cli_keywords.list, list) {
|
||||||
|
for (i = 0; kw_list->kw[i].str_kw[0]; i++) {
|
||||||
|
found = 1;
|
||||||
|
for (j = 0; j < CLI_PREFIX_KW_NB; j++) {
|
||||||
|
if (args[j] == NULL && kw_list->kw[i].str_kw[j] == NULL) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (args[j] == NULL || kw_list->kw[i].str_kw[j] == NULL) {
|
||||||
|
found = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (strcmp(args[j], kw_list->kw[i].str_kw[j]) != 0) {
|
||||||
|
found = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found)
|
||||||
|
return &kw_list->kw[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void cli_register_kw(struct cli_kw_list *kw_list)
|
void cli_register_kw(struct cli_kw_list *kw_list)
|
||||||
{
|
{
|
||||||
LIST_ADDQ(&cli_keywords.list, &kw_list->list);
|
LIST_ADDQ(&cli_keywords.list, &kw_list->list);
|
||||||
|
Loading…
Reference in New Issue
Block a user