diff options
author | vkalintiris <vasilis@netdata.cloud> | 2024-01-16 13:35:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-16 13:35:31 +0200 |
commit | d2463170f62e736fcb0cb1235fd28f46729a54aa (patch) | |
tree | e91227d06040e907283597a3ee507c9b20d505d8 | |
parent | 9665db92941a5fc5e84660bb711dbd0d357fb074 (diff) |
Use named constants for keyword tokens. (#16787)
* name integer constants in keyword switch.
* Update gperf config.
- Use initializer suffix to silence warnings when
enabling all warnings.
- Mark the generated table as const
* Fix pointer to bool conversion warwning
```
collectors/plugins.d/pluginsd_parser.c:798:37: warning: address of 'parser->user' will always evaluate to 'true' [-Wpointer-bool-conversion]
_Bool can_copy = ((&parser->user) && ((&parser->user)->capabilities & (STREAM_CAP_IEEE754)) == (STREAM_CAP_IEEE754)) == ((&parser->user.v2.stream_buffer) && ((&parser->user.v2.stream_buffer)->capabilities & (STREAM_CAP_IEEE754)) == (STREAM_CAP_IEEE754));
~~~~~~~~^~~~ ~~
```
* Revert "Fix pointer to bool conversion warwning"
This reverts commit 01171d03126411999764196986ffbf163a7df1f3.
* Return parser error when handling an unknown keyword.
-rw-r--r-- | collectors/plugins.d/gperf-config.txt | 124 | ||||
-rw-r--r-- | collectors/plugins.d/gperf-hashtable.h | 223 | ||||
-rw-r--r-- | collectors/plugins.d/pluginsd_parser.c | 117 | ||||
-rw-r--r-- | collectors/plugins.d/pluginsd_parser.h | 10 |
4 files changed, 271 insertions, 203 deletions
diff --git a/collectors/plugins.d/gperf-config.txt b/collectors/plugins.d/gperf-config.txt index 3682b1529d..721b771b77 100644 --- a/collectors/plugins.d/gperf-config.txt +++ b/collectors/plugins.d/gperf-config.txt @@ -1,3 +1,49 @@ +%{ + +#define PLUGINSD_KEYWORD_ID_FLUSH 97 +#define PLUGINSD_KEYWORD_ID_DISABLE 98 +#define PLUGINSD_KEYWORD_ID_EXIT 99 +#define PLUGINSD_KEYWORD_ID_HOST 71 +#define PLUGINSD_KEYWORD_ID_HOST_DEFINE 72 +#define PLUGINSD_KEYWORD_ID_HOST_DEFINE_END 73 +#define PLUGINSD_KEYWORD_ID_HOST_LABEL 74 + +#define PLUGINSD_KEYWORD_ID_BEGIN 12 +#define PLUGINSD_KEYWORD_ID_CHART 32 +#define PLUGINSD_KEYWORD_ID_CLABEL 34 +#define PLUGINSD_KEYWORD_ID_CLABEL_COMMIT 35 +#define PLUGINSD_KEYWORD_ID_DIMENSION 31 +#define PLUGINSD_KEYWORD_ID_END 13 +#define PLUGINSD_KEYWORD_ID_FUNCTION 41 +#define PLUGINSD_KEYWORD_ID_FUNCTION_RESULT_BEGIN 42 +#define PLUGINSD_KEYWORD_ID_FUNCTION_PROGRESS 43 +#define PLUGINSD_KEYWORD_ID_LABEL 51 +#define PLUGINSD_KEYWORD_ID_OVERWRITE 52 +#define PLUGINSD_KEYWORD_ID_SET 11 +#define PLUGINSD_KEYWORD_ID_VARIABLE 53 +#define PLUGINSD_KEYWORD_ID_CONFIG 100 + +#define PLUGINSD_KEYWORD_ID_CLAIMED_ID 61 +#define PLUGINSD_KEYWORD_ID_BEGIN2 2 +#define PLUGINSD_KEYWORD_ID_SET2 1 +#define PLUGINSD_KEYWORD_ID_END2 3 + +#define PLUGINSD_KEYWORD_ID_CHART_DEFINITION_END 33 +#define PLUGINSD_KEYWORD_ID_RBEGIN 22 +#define PLUGINSD_KEYWORD_ID_RDSTATE 23 +#define PLUGINSD_KEYWORD_ID_REND 25 +#define PLUGINSD_KEYWORD_ID_RSET 21 +#define PLUGINSD_KEYWORD_ID_RSSTATE 24 + +#define PLUGINSD_KEYWORD_ID_DYNCFG_ENABLE 901 +#define PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_MODULE 902 +#define PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_JOB 903 +#define PLUGINSD_KEYWORD_ID_DYNCFG_RESET 904 +#define PLUGINSD_KEYWORD_ID_REPORT_JOB_STATUS 905 +#define PLUGINSD_KEYWORD_ID_DELETE_JOB 906 + +%} + %struct-type %omit-struct-type %define hash-function-name gperf_keyword_hash_function @@ -5,60 +51,62 @@ %define word-array-name gperf_keywords %define constants-prefix GPERF_PARSER_ %define slot-name keyword +%define initializer-suffix ,0,PARSER_INIT_PLUGINSD,0 %global-table +%readonly-tables %null-strings PARSER_KEYWORD; + %% # # Plugins Only Keywords # -FLUSH, 97, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 1 -DISABLE, 98, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 2 -EXIT, 99, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 3 -HOST, 71, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 4 -HOST_DEFINE, 72, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 5 -HOST_DEFINE_END, 73, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 6 -HOST_LABEL, 74, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 7 +FLUSH, PLUGINSD_KEYWORD_ID_FLUSH, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 1 +DISABLE, PLUGINSD_KEYWORD_ID_DISABLE, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 2 +EXIT, PLUGINSD_KEYWORD_ID_EXIT, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 3 +HOST, PLUGINSD_KEYWORD_ID_HOST, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 4 +HOST_DEFINE, PLUGINSD_KEYWORD_ID_HOST_DEFINE, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 5 +HOST_DEFINE_END, PLUGINSD_KEYWORD_ID_HOST_DEFINE_END, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 6 +HOST_LABEL, PLUGINSD_KEYWORD_ID_HOST_LABEL, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 7 # # Common keywords # -BEGIN, 12, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 8 -CHART, 32, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 9 -CLABEL, 34, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 10 -CLABEL_COMMIT, 35, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 11 -DIMENSION, 31, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 12 -END, 13, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 13 -FUNCTION, 41, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 14 -FUNCTION_RESULT_BEGIN, 42, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 15 -FUNCTION_PROGRESS, 43, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 16 -# -LABEL, 51, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 17 -OVERWRITE, 52, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 18 -SET, 11, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 19 -VARIABLE, 53, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 20 -CONFIG, 100, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 21 +BEGIN, PLUGINSD_KEYWORD_ID_BEGIN, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 8 +CHART, PLUGINSD_KEYWORD_ID_CHART, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 9 +CLABEL, PLUGINSD_KEYWORD_ID_CLABEL, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 10 +CLABEL_COMMIT, PLUGINSD_KEYWORD_ID_CLABEL_COMMIT, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 11 +DIMENSION, PLUGINSD_KEYWORD_ID_DIMENSION, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 12 +END, PLUGINSD_KEYWORD_ID_END, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 13 +FUNCTION, PLUGINSD_KEYWORD_ID_FUNCTION, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 14 +FUNCTION_RESULT_BEGIN, PLUGINSD_KEYWORD_ID_FUNCTION_RESULT_BEGIN, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 15 +FUNCTION_PROGRESS, PLUGINSD_KEYWORD_ID_FUNCTION_PROGRESS, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 16 +LABEL, PLUGINSD_KEYWORD_ID_LABEL, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 17 +OVERWRITE, PLUGINSD_KEYWORD_ID_OVERWRITE, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 18 +SET, PLUGINSD_KEYWORD_ID_SET, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 19 +VARIABLE, PLUGINSD_KEYWORD_ID_VARIABLE, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 20 +CONFIG, PLUGINSD_KEYWORD_ID_CONFIG, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 21 # # Streaming only keywords # -CLAIMED_ID, 61, PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 22 -BEGIN2, 2, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 23 -SET2, 1, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 24 -END2, 3, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 25 +CLAIMED_ID, PLUGINSD_KEYWORD_ID_CLAIMED_ID, PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 22 +BEGIN2, PLUGINSD_KEYWORD_ID_BEGIN2, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 23 +SET2, PLUGINSD_KEYWORD_ID_SET2, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 24 +END2, PLUGINSD_KEYWORD_ID_END2, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 25 # # Streaming Replication keywords # -CHART_DEFINITION_END, 33, PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 26 -RBEGIN, 22, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 27 -RDSTATE, 23, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 28 -REND, 25, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 29 -RSET, 21, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 30 -RSSTATE, 24, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 31 +CHART_DEFINITION_END, PLUGINSD_KEYWORD_ID_CHART_DEFINITION_END, PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 26 +RBEGIN, PLUGINSD_KEYWORD_ID_RBEGIN, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 27 +RDSTATE, PLUGINSD_KEYWORD_ID_RDSTATE, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 28 +REND, PLUGINSD_KEYWORD_ID_REND, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 29 +RSET, PLUGINSD_KEYWORD_ID_RSET, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 30 +RSSTATE, PLUGINSD_KEYWORD_ID_RSSTATE, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 31 # # obsolete - do nothing commands # -DYNCFG_ENABLE, 901, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 32 -DYNCFG_REGISTER_MODULE, 902, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 33 -DYNCFG_REGISTER_JOB, 903, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 34 -DYNCFG_RESET, 904, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 35 -REPORT_JOB_STATUS, 905, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 36 -DELETE_JOB, 906, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 37 +DYNCFG_ENABLE, PLUGINSD_KEYWORD_ID_DYNCFG_ENABLE, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 32 +DYNCFG_REGISTER_MODULE, PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_MODULE, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 33 +DYNCFG_REGISTER_JOB, PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_JOB, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 34 +DYNCFG_RESET, PLUGINSD_KEYWORD_ID_DYNCFG_RESET, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 35 +REPORT_JOB_STATUS, PLUGINSD_KEYWORD_ID_REPORT_JOB_STATUS, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 36 +DELETE_JOB, PLUGINSD_KEYWORD_ID_DELETE_JOB, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 37 diff --git a/collectors/plugins.d/gperf-hashtable.h b/collectors/plugins.d/gperf-hashtable.h index 862fbb1b26..315e2f7c76 100644 --- a/collectors/plugins.d/gperf-hashtable.h +++ b/collectors/plugins.d/gperf-hashtable.h @@ -29,6 +29,51 @@ #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>." #endif +#line 1 "gperf-config.txt" + + +#define PLUGINSD_KEYWORD_ID_FLUSH 97 +#define PLUGINSD_KEYWORD_ID_DISABLE 98 +#define PLUGINSD_KEYWORD_ID_EXIT 99 +#define PLUGINSD_KEYWORD_ID_HOST 71 +#define PLUGINSD_KEYWORD_ID_HOST_DEFINE 72 +#define PLUGINSD_KEYWORD_ID_HOST_DEFINE_END 73 +#define PLUGINSD_KEYWORD_ID_HOST_LABEL 74 + +#define PLUGINSD_KEYWORD_ID_BEGIN 12 +#define PLUGINSD_KEYWORD_ID_CHART 32 +#define PLUGINSD_KEYWORD_ID_CLABEL 34 +#define PLUGINSD_KEYWORD_ID_CLABEL_COMMIT 35 +#define PLUGINSD_KEYWORD_ID_DIMENSION 31 +#define PLUGINSD_KEYWORD_ID_END 13 +#define PLUGINSD_KEYWORD_ID_FUNCTION 41 +#define PLUGINSD_KEYWORD_ID_FUNCTION_RESULT_BEGIN 42 +#define PLUGINSD_KEYWORD_ID_FUNCTION_PROGRESS 43 +#define PLUGINSD_KEYWORD_ID_LABEL 51 +#define PLUGINSD_KEYWORD_ID_OVERWRITE 52 +#define PLUGINSD_KEYWORD_ID_SET 11 +#define PLUGINSD_KEYWORD_ID_VARIABLE 53 +#define PLUGINSD_KEYWORD_ID_CONFIG 100 + +#define PLUGINSD_KEYWORD_ID_CLAIMED_ID 61 +#define PLUGINSD_KEYWORD_ID_BEGIN2 2 +#define PLUGINSD_KEYWORD_ID_SET2 1 +#define PLUGINSD_KEYWORD_ID_END2 3 + +#define PLUGINSD_KEYWORD_ID_CHART_DEFINITION_END 33 +#define PLUGINSD_KEYWORD_ID_RBEGIN 22 +#define PLUGINSD_KEYWORD_ID_RDSTATE 23 +#define PLUGINSD_KEYWORD_ID_REND 25 +#define PLUGINSD_KEYWORD_ID_RSET 21 +#define PLUGINSD_KEYWORD_ID_RSSTATE 24 + +#define PLUGINSD_KEYWORD_ID_DYNCFG_ENABLE 901 +#define PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_MODULE 902 +#define PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_JOB 903 +#define PLUGINSD_KEYWORD_ID_DYNCFG_RESET 904 +#define PLUGINSD_KEYWORD_ID_REPORT_JOB_STATUS 905 +#define PLUGINSD_KEYWORD_ID_DELETE_JOB 906 + #define GPERF_PARSER_TOTAL_KEYWORDS 37 #define GPERF_PARSER_MIN_WORD_LENGTH 3 @@ -47,7 +92,7 @@ inline static unsigned int gperf_keyword_hash_function (register const char *str, register size_t len) { - static unsigned char asso_values[] = + static const unsigned char asso_values[] = { 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, @@ -79,95 +124,101 @@ gperf_keyword_hash_function (register const char *str, register size_t len) return len + asso_values[(unsigned char)str[1]] + asso_values[(unsigned char)str[0]]; } -static PARSER_KEYWORD gperf_keywords[] = +static const PARSER_KEYWORD gperf_keywords[] = { - {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0}, - {(char*)0}, {(char*)0}, {(char*)0}, -#line 18 "gperf-config.txt" - {"HOST", 71, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 4}, - {(char*)0}, -#line 39 "gperf-config.txt" - {"CONFIG", 100, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 21}, -#line 53 "gperf-config.txt" - {"REND", 25, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 29}, -#line 26 "gperf-config.txt" - {"CHART", 32, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 9}, -#line 36 "gperf-config.txt" - {"OVERWRITE", 52, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 18}, -#line 21 "gperf-config.txt" - {"HOST_LABEL", 74, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 7}, -#line 19 "gperf-config.txt" - {"HOST_DEFINE", 72, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 5}, - {(char*)0}, -#line 52 "gperf-config.txt" - {"RDSTATE", 23, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 28}, -#line 38 "gperf-config.txt" - {"VARIABLE", 53, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 20}, -#line 20 "gperf-config.txt" - {"HOST_DEFINE_END", 73, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 6}, -#line 17 "gperf-config.txt" - {"EXIT", 99, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 3}, -#line 31 "gperf-config.txt" - {"FUNCTION", 41, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 14}, -#line 62 "gperf-config.txt" - {"DYNCFG_RESET", 904, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 35}, -#line 59 "gperf-config.txt" - {"DYNCFG_ENABLE", 901, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 32}, -#line 63 "gperf-config.txt" - {"REPORT_JOB_STATUS", 905, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 36}, - {(char*)0}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 67 "gperf-config.txt" + {"HOST", PLUGINSD_KEYWORD_ID_HOST, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 4}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 87 "gperf-config.txt" + {"CONFIG", PLUGINSD_KEYWORD_ID_CONFIG, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 21}, +#line 101 "gperf-config.txt" + {"REND", PLUGINSD_KEYWORD_ID_REND, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 29}, +#line 75 "gperf-config.txt" + {"CHART", PLUGINSD_KEYWORD_ID_CHART, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 9}, +#line 84 "gperf-config.txt" + {"OVERWRITE", PLUGINSD_KEYWORD_ID_OVERWRITE, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 18}, +#line 70 "gperf-config.txt" + {"HOST_LABEL", PLUGINSD_KEYWORD_ID_HOST_LABEL, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 7}, +#line 68 "gperf-config.txt" + {"HOST_DEFINE", PLUGINSD_KEYWORD_ID_HOST_DEFINE, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 5}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 100 "gperf-config.txt" + {"RDSTATE", PLUGINSD_KEYWORD_ID_RDSTATE, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 28}, +#line 86 "gperf-config.txt" + {"VARIABLE", PLUGINSD_KEYWORD_ID_VARIABLE, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 20}, +#line 69 "gperf-config.txt" + {"HOST_DEFINE_END", PLUGINSD_KEYWORD_ID_HOST_DEFINE_END, PARSER_INIT_PLUGINSD|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 6}, +#line 66 "gperf-config.txt" + {"EXIT", PLUGINSD_KEYWORD_ID_EXIT, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 3}, +#line 80 "gperf-config.txt" + {"FUNCTION", PLUGINSD_KEYWORD_ID_FUNCTION, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 14}, +#line 110 "gperf-config.txt" + {"DYNCFG_RESET", PLUGINSD_KEYWORD_ID_DYNCFG_RESET, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 35}, +#line 107 "gperf-config.txt" + {"DYNCFG_ENABLE", PLUGINSD_KEYWORD_ID_DYNCFG_ENABLE, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 32}, +#line 111 "gperf-config.txt" + {"REPORT_JOB_STATUS", PLUGINSD_KEYWORD_ID_REPORT_JOB_STATUS, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 36}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 112 "gperf-config.txt" + {"DELETE_JOB", PLUGINSD_KEYWORD_ID_DELETE_JOB, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 37}, +#line 98 "gperf-config.txt" + {"CHART_DEFINITION_END", PLUGINSD_KEYWORD_ID_CHART_DEFINITION_END, PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 26}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 109 "gperf-config.txt" + {"DYNCFG_REGISTER_JOB", PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_JOB, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 34}, +#line 82 "gperf-config.txt" + {"FUNCTION_PROGRESS", PLUGINSD_KEYWORD_ID_FUNCTION_PROGRESS, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 16}, +#line 99 "gperf-config.txt" + {"RBEGIN", PLUGINSD_KEYWORD_ID_RBEGIN, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 27}, +#line 108 "gperf-config.txt" + {"DYNCFG_REGISTER_MODULE", PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_MODULE, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 33}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 81 "gperf-config.txt" + {"FUNCTION_RESULT_BEGIN", PLUGINSD_KEYWORD_ID_FUNCTION_RESULT_BEGIN, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 15}, +#line 102 "gperf-config.txt" + {"RSET", PLUGINSD_KEYWORD_ID_RSET, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 30}, +#line 74 "gperf-config.txt" + {"BEGIN", PLUGINSD_KEYWORD_ID_BEGIN, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 8}, +#line 92 "gperf-config.txt" + {"BEGIN2", PLUGINSD_KEYWORD_ID_BEGIN2, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 23}, +#line 103 "gperf-config.txt" + {"RSSTATE", PLUGINSD_KEYWORD_ID_RSSTATE, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 31}, #line 64 "gperf-config.txt" - {"DELETE_JOB", 906, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 37}, -#line 50 "gperf-config.txt" - {"CHART_DEFINITION_END", 33, PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 26}, - {(char*)0}, -#line 61 "gperf-config.txt" - {"DYNCFG_REGISTER_JOB", 903, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 34}, -#line 33 "gperf-config.txt" - {"FUNCTION_PROGRESS", 43, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 16}, -#line 51 "gperf-config.txt" - {"RBEGIN", 22, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 27}, -#line 60 "gperf-config.txt" - {"DYNCFG_REGISTER_MODULE", 902, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 33}, - {(char*)0}, -#line 32 "gperf-config.txt" - {"FUNCTION_RESULT_BEGIN", 42, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 15}, -#line 54 "gperf-config.txt" - {"RSET", 21, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 30}, -#line 25 "gperf-config.txt" - {"BEGIN", 12, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 8}, -#line 44 "gperf-config.txt" - {"BEGIN2", 2, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 23}, -#line 55 "gperf-config.txt" - {"RSSTATE", 24, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 31}, -#line 15 "gperf-config.txt" - {"FLUSH", 97, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 1}, -#line 37 "gperf-config.txt" - {"SET", 11, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 19}, -#line 45 "gperf-config.txt" - {"SET2", 1, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 24}, - {(char*)0}, -#line 27 "gperf-config.txt" - {"CLABEL", 34, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 10}, -#line 16 "gperf-config.txt" - {"DISABLE", 98, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 2}, -#line 35 "gperf-config.txt" - {"LABEL", 51, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 17}, -#line 29 "gperf-config.txt" - {"DIMENSION", 31, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 12}, -#line 43 "gperf-config.txt" - {"CLAIMED_ID", 61, PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 22}, - {(char*)0}, {(char*)0}, -#line 28 "gperf-config.txt" - {"CLABEL_COMMIT", 35, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 11}, - {(char*)0}, -#line 30 "gperf-config.txt" - {"END", 13, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 13}, -#line 46 "gperf-config.txt" - {"END2", 3, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 25} + {"FLUSH", PLUGINSD_KEYWORD_ID_FLUSH, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 1}, +#line 85 "gperf-config.txt" + {"SET", PLUGINSD_KEYWORD_ID_SET, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 19}, +#line 93 "gperf-config.txt" + {"SET2", PLUGINSD_KEYWORD_ID_SET2, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 24}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 76 "gperf-config.txt" + {"CLABEL", PLUGINSD_KEYWORD_ID_CLABEL, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 10}, +#line 65 "gperf-config.txt" + {"DISABLE", PLUGINSD_KEYWORD_ID_DISABLE, PARSER_INIT_PLUGINSD, WORKER_PARSER_FIRST_JOB + 2}, +#line 83 "gperf-config.txt" + {"LABEL", PLUGINSD_KEYWORD_ID_LABEL, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 17}, +#line 78 "gperf-config.txt" + {"DIMENSION", PLUGINSD_KEYWORD_ID_DIMENSION, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 12}, +#line 91 "gperf-config.txt" + {"CLAIMED_ID", PLUGINSD_KEYWORD_ID_CLAIMED_ID, PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 22}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 77 "gperf-config.txt" + {"CLABEL_COMMIT", PLUGINSD_KEYWORD_ID_CLABEL_COMMIT, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING|PARSER_REP_METADATA, WORKER_PARSER_FIRST_JOB + 11}, + {(char*)0,0,PARSER_INIT_PLUGINSD,0}, +#line 79 "gperf-config.txt" + {"END", PLUGINSD_KEYWORD_ID_END, PARSER_INIT_PLUGINSD|PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 13}, +#line 94 "gperf-config.txt" + {"END2", PLUGINSD_KEYWORD_ID_END2, PARSER_INIT_STREAMING, WORKER_PARSER_FIRST_JOB + 25} }; -PARSER_KEYWORD * +const PARSER_KEYWORD * gperf_lookup_keyword (register const char *str, register size_t len) { if (len <= GPERF_PARSER_MAX_WORD_LENGTH && len >= GPERF_PARSER_MIN_WORD_LENGTH) diff --git a/collectors/plugins.d/pluginsd_parser.c b/collectors/plugins.d/pluginsd_parser.c index c7ecd2b765..8d03f8b8ca 100644 --- a/collectors/plugins.d/pluginsd_parser.c +++ b/collectors/plugins.d/pluginsd_parser.c @@ -1264,118 +1264,87 @@ inline size_t pluginsd_process(RRDHOST *host, struct plugind *cd, FILE *fp_plugi return count; } -PARSER_RC parser_execute(PARSER *parser, PARSER_KEYWORD *keyword, char **words, size_t num_words) { +#include "gperf-hashtable.h" + +PARSER_RC parser_execute(PARSER *parser, const PARSER_KEYWORD *keyword, char **words, size_t num_words) { switch(keyword->id) { - case 1: + case PLUGINSD_KEYWORD_ID_SET2: return pluginsd_set_v2(words, num_words, parser); - - case 2: + case PLUGINSD_KEYWORD_ID_BEGIN2: return pluginsd_begin_v2(words, num_words, parser); - - case 3: + case PLUGINSD_KEYWORD_ID_END2: return pluginsd_end_v2(words, num_words, parser); - - case 11: + case PLUGINSD_KEYWORD_ID_SET: return pluginsd_set(words, num_words, parser); - - case 12: + case PLUGINSD_KEYWORD_ID_BEGIN: return pluginsd_begin(words, num_words, parser); - - case 13: + case PLUGINSD_KEYWORD_ID_END: return pluginsd_end(words, num_words, parser); - - case 21: + case PLUGINSD_KEYWORD_ID_RSET: return pluginsd_replay_set(words, num_words, parser); - - case 22: + case PLUGINSD_KEYWORD_ID_RBEGIN: return pluginsd_replay_begin(words, num_words, parser); - - case 23: + case PLUGINSD_KEYWORD_ID_RDSTATE: return pluginsd_replay_rrddim_collection_state(words, num_words, parser); - - case 24: + case PLUGINSD_KEYWORD_ID_RSSTATE: return pluginsd_replay_rrdset_collection_state(words, num_words, parser); - - case 25: + case PLUGINSD_KEYWORD_ID_REND: return pluginsd_replay_end(words, num_words, parser); - - case 31: + case PLUGINSD_KEYWORD_ID_DIMENSION: return pluginsd_dimension(words, num_words, parser); - - case 32: + case PLUGINSD_KEYWORD_ID_CHART: return pluginsd_chart(words, num_words, parser); - - case 33: + case PLUGINSD_KEYWORD_ID_CHART_DEFINITION_END: return pluginsd_chart_definition_end(words, num_words, parser); - - case 34: + case PLUGINSD_KEYWORD_ID_CLABEL: return pluginsd_clabel(words, num_words, parser); - - case 35: + case PLUGINSD_KEYWORD_ID_CLABEL_COMMIT: return pluginsd_clabel_commit(words, num_words, parser); - - case 41: + case PLUGINSD_KEYWORD_ID_FUNCTION: return pluginsd_function(words, num_words, parser); - - case 42: + case PLUGINSD_KEYWORD_ID_FUNCTION_RESULT_BEGIN: return pluginsd_function_result_begin(words, num_words, parser); - - case 43: + case PLUGINSD_KEYWORD_ID_FUNCTION_PROGRESS: return pluginsd_function_progress(words, num_words, parser); - - case 51: + case PLUGINSD_KEYWORD_ID_LABEL: return pluginsd_label(words, num_words, parser); - - case 52: + case PLUGINSD_KEYWORD_ID_OVERWRITE: return pluginsd_overwrite(words, num_words, parser); - - case 53: + case PLUGINSD_KEYWORD_ID_VARIABLE: return pluginsd_variable(words, num_words, parser); - - case 61: + case PLUGINSD_KEYWORD_ID_CLAIMED_ID: return streaming_claimed_id(words, num_words, parser); - - case 71: + case PLUGINSD_KEYWORD_ID_HOST: return pluginsd_host(words, num_words, parser); - - case 72: + case PLUGINSD_KEYWORD_ID_HOST_DEFINE: return pluginsd_host_define(words, num_words, parser); - - case 73: + case PLUGINSD_KEYWORD_ID_HOST_DEFINE_END: return pluginsd_host_define_end(words, num_words, parser); - - case 74: + case PLUGINSD_KEYWORD_ID_HOST_LABEL: return pluginsd_host_labels(words, num_words, parser); - - case 97: + case PLUGINSD_KEYWORD_ID_FLUSH: return pluginsd_flush(words, num_words, parser); - - case 98: + case PLUGINSD_KEYWORD_ID_DISABLE: return pluginsd_disable(words, num_words, parser); - - case 99: + case PLUGINSD_KEYWORD_ID_EXIT: return pluginsd_exit(words, num_words, parser); - - case 100: + case PLUGINSD_KEYWORD_ID_CONFIG: return pluginsd_config(words, num_words, parser); - case 901: - case 902: - case 903: - case 904: - case 905: - case 906: + case PLUGINSD_KEYWORD_ID_DYNCFG_ENABLE: + case PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_MODULE: + case PLUGINSD_KEYWORD_ID_DYNCFG_REGISTER_JOB: + case PLUGINSD_KEYWORD_ID_DYNCFG_RESET: + case PLUGINSD_KEYWORD_ID_REPORT_JOB_STATUS: + case PLUGINSD_KEYWORD_ID_DELETE_JOB: return pluginsd_dyncfg_noop(words, num_words, parser); default: - break; + netdata_log_error("Unknown keyword '%s' with id %zu", keyword->keyword, keyword->id); + return PARSER_RC_ERROR;; } - - fatal("Unknown keyword '%s' with id %zu", keyword->keyword, keyword->id); } -#include "gperf-hashtable.h" - void parser_init_repertoire(PARSER *parser, PARSER_REPERTOIRE repertoire) { parser->repertoire = repertoire; @@ -1409,7 +1378,7 @@ int pluginsd_parser_unittest(void) { strncpyz(input, lines[line], PLUGINSD_LINE_MAX); size_t num_words = quoted_strings_splitter_pluginsd(input, words, PLUGINSD_MAX_WORDS); const char *command = get_word(words, num_words, 0); - PARSER_KEYWORD *keyword = parser_find_keyword(p, command); + const PARSER_KEYWORD *keyword = parser_find_keyword(p, command); if(unlikely(!keyword)) fatal("Cannot parse the line '%s'", lines[line]); count++; diff --git a/collectors/plugins.d/pluginsd_parser.h b/collectors/plugins.d/pluginsd_parser.h index d769c0f85c..d317a77bee 100644 --- a/collectors/plugins.d/pluginsd_parser.h +++ b/collectors/plugins.d/pluginsd_parser.h @@ -112,7 +112,7 @@ typedef struct parser { struct buffered_reader reader; struct line_splitter line; - PARSER_KEYWORD *keyword; + const PARSER_KEYWORD *keyword; struct { const char *end_keyword; @@ -137,7 +137,7 @@ void parser_init_repertoire(PARSER *parser, PARSER_REPERTOIRE repertoire); void parser_destroy(PARSER *working_parser); void pluginsd_cleanup_v2(PARSER *parser); void pluginsd_keywords_init(PARSER *parser, PARSER_REPERTOIRE repertoire); -PARSER_RC parser_execute(PARSER *parser, PARSER_KEYWORD *keyword, char **words, size_t num_words); +PARSER_RC parser_execute(PARSER *parser, const PARSER_KEYWORD *keyword, char **words, size_t num_words); static inline int find_first_keyword(const char *src, char *dst, int dst_size, bool *isspace_map) { const char *s = src, *keyword_start; @@ -153,10 +153,10 @@ static inline int find_first_keyword(const char *src, char *dst, int dst_size, b return dst_size == 0 ? 0 : (int) (s - keyword_start); } -PARSER_KEYWORD *gperf_lookup_keyword(register const char *str, register size_t len); +const PARSER_KEYWORD *gperf_lookup_keyword(register const char *str, register size_t len); -static inline PARSER_KEYWORD *parser_find_keyword(PARSER *parser, const char *command) { - PARSER_KEYWORD *t = gperf_lookup_keyword(command, strlen(command)); +static inline const PARSER_KEYWORD *parser_find_keyword(PARSER *parser, const char *command) { + const PARSER_KEYWORD *t = gperf_lookup_keyword(command, strlen(command)); if(t && (t->repertoire & parser->repertoire)) return t; |