diff options
| author | BeF | 2022-07-20 12:15:07 +0200 |
|---|---|---|
| committer | GitHub | 2022-07-20 12:15:07 +0200 |
| commit | 2aed4220c2d019cc9b46fec70cfd79d249498e14 (patch) | |
| tree | e7cc3d1d4db617fc5ab1dbcc60f2366407eb5da5 /src/sp_config_scanner.re | |
| parent | 72109c9bf016145364b19162a5ff998fc5858a9c (diff) | |
| parent | 75595945d1d868fbd6db743809ca8a3eb5de3113 (diff) | |
Merge pull request #1 from jvoisin/pr1
pr for fetching upstream
Diffstat (limited to 'src/sp_config_scanner.re')
| -rw-r--r-- | src/sp_config_scanner.re | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/sp_config_scanner.re b/src/sp_config_scanner.re index d7c9884..6a14a11 100644 --- a/src/sp_config_scanner.re +++ b/src/sp_config_scanner.re | |||
| @@ -1,5 +1,7 @@ | |||
| 1 | #include "php_snuffleupagus.h" | 1 | #include "php_snuffleupagus.h" |
| 2 | 2 | ||
| 3 | #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" | ||
| 4 | |||
| 3 | /*!types:re2c*/ | 5 | /*!types:re2c*/ |
| 4 | 6 | ||
| 5 | #define cs_log_error(fmt, ...) sp_log_err("config", fmt, ##__VA_ARGS__) | 7 | #define cs_log_error(fmt, ...) sp_log_err("config", fmt, ##__VA_ARGS__) |
| @@ -7,7 +9,7 @@ | |||
| 7 | #define cs_log_warning(fmt, ...) sp_log_warn("config", fmt, ##__VA_ARGS__) | 9 | #define cs_log_warning(fmt, ...) sp_log_warn("config", fmt, ##__VA_ARGS__) |
| 8 | 10 | ||
| 9 | 11 | ||
| 10 | zend_string *sp_get_arg_string(sp_parsed_keyword *kw) { | 12 | zend_string *sp_get_arg_string(sp_parsed_keyword const *const kw) { |
| 11 | if (!kw || !kw->arg) { | 13 | if (!kw || !kw->arg) { |
| 12 | return NULL; | 14 | return NULL; |
| 13 | } | 15 | } |
| @@ -33,11 +35,10 @@ zend_string *sp_get_arg_string(sp_parsed_keyword *kw) { | |||
| 33 | return ret; | 35 | return ret; |
| 34 | } | 36 | } |
| 35 | 37 | ||
| 36 | zend_string *sp_get_textual_representation(sp_parsed_keyword *parsed_rule) { | 38 | zend_string *sp_get_textual_representation(sp_parsed_keyword const *const parsed_rule) { |
| 37 | // a rule is "sp.keyword...keyword(arg);\0" | 39 | // a rule is "sp.keyword...keyword(arg);\0" |
| 38 | size_t len = 3; // sp + ; | 40 | size_t len = 3; // sp + ; |
| 39 | sp_parsed_keyword *kw; | 41 | for (const sp_parsed_keyword *kw = parsed_rule; kw->kw; kw++) { |
| 40 | for (kw = parsed_rule; kw->kw; kw++) { | ||
| 41 | len++; // . | 42 | len++; // . |
| 42 | len += kw->kwlen; | 43 | len += kw->kwlen; |
| 43 | if (kw->argtype == SP_ARGTYPE_EMPTY) { | 44 | if (kw->argtype == SP_ARGTYPE_EMPTY) { |
| @@ -47,10 +48,12 @@ zend_string *sp_get_textual_representation(sp_parsed_keyword *parsed_rule) { | |||
| 47 | len += kw->arglen; | 48 | len += kw->arglen; |
| 48 | } | 49 | } |
| 49 | } | 50 | } |
| 51 | |||
| 50 | zend_string *ret = zend_string_alloc(len, 1); | 52 | zend_string *ret = zend_string_alloc(len, 1); |
| 51 | char *ptr = ZSTR_VAL(ret); | 53 | char *ptr = ZSTR_VAL(ret); |
| 54 | |||
| 52 | memcpy(ptr, "sp", 2); ptr += 2; | 55 | memcpy(ptr, "sp", 2); ptr += 2; |
| 53 | for (kw = parsed_rule; kw->kw; kw++) { | 56 | for (const sp_parsed_keyword *kw = parsed_rule; kw->kw; kw++) { |
| 54 | *ptr++ = '.'; | 57 | *ptr++ = '.'; |
| 55 | memcpy(ptr, kw->kw, kw->kwlen); ptr += kw->kwlen; | 58 | memcpy(ptr, kw->kw, kw->kwlen); ptr += kw->kwlen; |
| 56 | if (kw->argtype == SP_ARGTYPE_EMPTY || kw->argtype == SP_ARGTYPE_STR || kw->argtype == SP_ARGTYPE_UNKNOWN) { | 59 | if (kw->argtype == SP_ARGTYPE_EMPTY || kw->argtype == SP_ARGTYPE_STR || kw->argtype == SP_ARGTYPE_UNKNOWN) { |
| @@ -322,4 +325,4 @@ zend_result sp_config_scan(char *data, zend_result (*process_rule)(sp_parsed_key | |||
| 322 | out: | 325 | out: |
| 323 | zend_hash_destroy(&vars); | 326 | zend_hash_destroy(&vars); |
| 324 | return ret; | 327 | return ret; |
| 325 | } \ No newline at end of file | 328 | } |
