summaryrefslogtreecommitdiff
path: root/src/sp_config_scanner.re
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp_config_scanner.re')
-rw-r--r--src/sp_config_scanner.re15
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
10zend_string *sp_get_arg_string(sp_parsed_keyword *kw) { 12zend_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
36zend_string *sp_get_textual_representation(sp_parsed_keyword *parsed_rule) { 38zend_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
322out: 325out:
323 zend_hash_destroy(&vars); 326 zend_hash_destroy(&vars);
324 return ret; 327 return ret;
325} \ No newline at end of file 328}