summaryrefslogtreecommitdiff
path: root/src/sp_utils.c
diff options
context:
space:
mode:
authorjvoisin2017-12-01 16:56:58 +0100
committerjvoisin2017-12-01 16:56:58 +0100
commit5efe641fefc74dfc908efd43d862477e91d904a9 (patch)
tree4c096d28c2059cfe0866e223b1106f4032697c63 /src/sp_utils.c
parentc041a7ab3b6daa75edf9e7fa07acc1422af41d44 (diff)
Vastly simplify the dumping process
Diffstat (limited to 'src/sp_utils.c')
-rw-r--r--src/sp_utils.c31
1 files changed, 2 insertions, 29 deletions
diff --git a/src/sp_utils.c b/src/sp_utils.c
index 28c8a8b..73ad528 100644
--- a/src/sp_utils.c
+++ b/src/sp_utils.c
@@ -132,45 +132,18 @@ int sp_log_request(const char* folder) {
132 for (size_t i = 0; i < (sizeof(zones) / sizeof(zones[0])) - 1; i++) { 132 for (size_t i = 0; i < (sizeof(zones) / sizeof(zones[0])) - 1; i++) {
133 zval* variable_value; 133 zval* variable_value;
134 zend_string* variable_key; 134 zend_string* variable_key;
135 size_t params_len = strlen(zones[i].str) + 1;
136 char* param;
137 size_t size_max = 2048;
138 135
139 if (Z_TYPE(PG(http_globals)[zones[i].key]) == IS_UNDEF) { 136 if (Z_TYPE(PG(http_globals)[zones[i].key]) == IS_UNDEF) {
140 continue; 137 continue;
141 } 138 }
142 139
143 HashTable* ht = Z_ARRVAL(PG(http_globals)[zones[i].key]); 140 HashTable* ht = Z_ARRVAL(PG(http_globals)[zones[i].key]);
144 141 fprintf(file, "%s:", zones[i].str);
145 // Compute the size of the allocation
146 ZEND_HASH_FOREACH_STR_KEY_VAL(ht, variable_key, variable_value) { 142 ZEND_HASH_FOREACH_STR_KEY_VAL(ht, variable_key, variable_value) {
147 params_len += snprintf(NULL, 0, "%s=%s&", ZSTR_VAL(variable_key), 143 fprintf(file, "%s=%s&", ZSTR_VAL(variable_key), Z_STRVAL_P(variable_value));
148 Z_STRVAL_P(variable_value));
149 } 144 }
150 ZEND_HASH_FOREACH_END(); 145 ZEND_HASH_FOREACH_END();
151
152 params_len = params_len>size_max?size_max:params_len;
153
154#define NCAT_AND_DEC(a, b, c) strncat(a, b, c); c -= strlen(b);
155
156 // Allocate and copy the data
157 // FIXME Why are we even allocating?
158 param = ecalloc(params_len, 1);
159 NCAT_AND_DEC(param, zones[i].str, params_len);
160 NCAT_AND_DEC(param, ":", params_len);
161 ZEND_HASH_FOREACH_STR_KEY_VAL(ht, variable_key, variable_value) {
162 NCAT_AND_DEC(param, ZSTR_VAL(variable_key), params_len);
163 NCAT_AND_DEC(param, "=", params_len);
164 NCAT_AND_DEC(param, Z_STRVAL_P(variable_value), params_len);
165 NCAT_AND_DEC(param, "&", params_len);
166 }
167 ZEND_HASH_FOREACH_END();
168
169 param[strlen(param) - 1] = '\0';
170
171 fputs(param, file);
172 fputs("\n", file); 146 fputs("\n", file);
173 efree(param);
174 } 147 }
175 fclose(file); 148 fclose(file);
176 149