| line |
true |
false |
branch |
|
24
|
1 |
11073 |
if (val < 0) { neg = 1; uval = -(unsigned long)val; } else { uval = (unsigned long)val; } |
|
25
|
30796 |
11074 |
do { tmp[len++] = '0' + (uval % 10); uval /= 10; } while (uval); |
|
26
|
1 |
11073 |
if (neg) tmp[len++] = '-'; |
|
27
|
41871 |
11074 |
for (int i = 0; i < len; i++) buf[i] = tmp[len - 1 - i]; |
|
35
|
3 |
1003 |
if (val < 0) { neg = 1; uval = -(unsigned long)val; } else { uval = (unsigned long)val; } |
|
36
|
1939 |
1006 |
do { digits[dlen++] = '0' + (uval % 10); uval /= 10; } while (uval); |
|
38
|
3 |
1003 |
if (neg) buf[pos++] = '-'; |
|
39
|
2945 |
1006 |
for (int i = dlen - 1; i >= 0; i--) { |
|
41
|
1939 |
1006 |
if (i > 0 && i % 3 == 0) buf[pos++] = ','; |
|
|
16 |
1923 |
if (i > 0 && i % 3 == 0) buf[pos++] = ','; |
|
53
|
0 |
4 |
if (html_tables_inited) return; |
|
70
|
128 |
4 |
for (int i = 0; i < 0x20; i++) json_special[i] = 1; |
|
77
|
41 |
11 |
while (i < slen) { |
|
80
|
238 |
4 |
while (run < slen && !html_special[(unsigned char)src[run]]) run++; |
|
|
201 |
37 |
while (run < slen && !html_special[(unsigned char)src[run]]) run++; |
|
81
|
31 |
10 |
if (run > i) { |
|
86
|
4 |
37 |
if (i >= slen) break; |
|
102
|
4 |
1 |
while (i < slen) { |
|
104
|
17 |
0 |
while (run < slen && !html_br_special[(unsigned char)src[run]]) run++; |
|
|
13 |
4 |
while (run < slen && !html_br_special[(unsigned char)src[run]]) run++; |
|
105
|
3 |
1 |
if (run > i) { |
|
110
|
0 |
4 |
if (i >= slen) break; |
|
127
|
19 |
1 |
for (STRLEN i = 0; i < slen; i++) { |
|
129
|
16 |
3 |
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || |
|
|
16 |
0 |
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || |
|
|
16 |
3 |
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || |
|
|
0 |
16 |
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || |
|
|
1 |
2 |
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || |
|
130
|
1 |
0 |
(c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.' || c == '~') |
|
|
3 |
0 |
(c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.' || c == '~') |
|
|
3 |
0 |
(c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.' || c == '~') |
|
|
3 |
0 |
(c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.' || c == '~') |
|
|
0 |
3 |
(c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.' || c == '~') |
|
140
|
27 |
3 |
for (STRLEN i = 0; i < slen; i++) { |
|
151
|
2 |
20 |
if (c < 0x20) { |
|
162
|
3 |
1 |
for (STRLEN i = 0; i < slen; i++) { |
|
175
|
4 |
10 |
for (i = 0; i + 2 < slen; i += 3) { |
|
181
|
9 |
1 |
if (i < slen) { |
|
183
|
6 |
3 |
if (i + 1 < slen) { |
|
188
|
2 |
1 |
if (pad) *out++ = '='; |
|
190
|
6 |
3 |
if (pad) *out++ = '='; |
|
252
|
12 |
194 |
if (t->header) free(t->header); |
|
253
|
12 |
194 |
if (t->footer) free(t->footer); |
|
254
|
30 |
176 |
if (t->sep) free(t->sep); |
|
255
|
195 |
11 |
if (t->render_buf) free(t->render_buf); |
|
256
|
1 |
205 |
if (t->skip_if_key) free(t->skip_if_key); |
|
257
|
1 |
205 |
if (t->skip_unless_key) free(t->skip_unless_key); |
|
258
|
268 |
206 |
for (int i = 0; i < t->nops; i++) { |
|
259
|
48 |
220 |
if (t->ops[i].static_data) free(t->ops[i].static_data); |
|
260
|
19 |
249 |
if (t->ops[i].key) free(t->ops[i].key); |
|
261
|
220 |
48 |
if (t->ops[i].chain) { |
|
262
|
237 |
220 |
for (int j = 0; j < t->ops[i].chain_len; j++) { |
|
264
|
40 |
197 |
if (x->param_str) free(x->param_str); |
|
265
|
17 |
220 |
if (x->param_str2) free(x->param_str2); |
|
266
|
5 |
232 |
if (x->map_keys) { |
|
267
|
13 |
5 |
for (int k = 0; k < x->map_count; k++) { free(x->map_keys[k]); free(x->map_vals[k]); } |
|
274
|
206 |
0 |
if (t->ops) free(t->ops); |
|
282
|
66 |
169 |
int tlen = colon ? (int)(colon - s) : len; |
|
283
|
66 |
169 |
const char *param = colon ? colon + 1 : NULL; |
|
284
|
66 |
169 |
int plen = colon ? len - tlen - 1 : 0; |
|
286
|
78 |
157 |
if (tlen == 3 && memcmp(s, "int", 3) == 0) x.type = XF_INT; |
|
|
29 |
49 |
if (tlen == 3 && memcmp(s, "int", 3) == 0) x.type = XF_INT; |
|
287
|
16 |
190 |
else if (tlen == 9 && memcmp(s, "int_comma", 9) == 0) x.type = XF_INT_COMMA; |
|
|
7 |
9 |
else if (tlen == 9 && memcmp(s, "int_comma", 9) == 0) x.type = XF_INT_COMMA; |
|
288
|
14 |
185 |
else if (tlen == 5 && memcmp(s, "float", 5) == 0) { x.type = XF_FLOAT; x.param_int = 2; } |
|
|
4 |
10 |
else if (tlen == 5 && memcmp(s, "float", 5) == 0) { x.type = XF_FLOAT; x.param_int = 2; } |
|
289
|
57 |
138 |
else if (tlen == 4 && memcmp(s, "html", 4) == 0) x.type = XF_HTML; |
|
|
20 |
37 |
else if (tlen == 4 && memcmp(s, "html", 4) == 0) x.type = XF_HTML; |
|
290
|
24 |
151 |
else if (tlen == 7 && memcmp(s, "html_br", 7) == 0) x.type = XF_HTML_BR; |
|
|
2 |
22 |
else if (tlen == 7 && memcmp(s, "html_br", 7) == 0) x.type = XF_HTML_BR; |
|
291
|
49 |
124 |
else if (tlen == 3 && memcmp(s, "raw", 3) == 0) x.type = XF_RAW; |
|
|
32 |
17 |
else if (tlen == 3 && memcmp(s, "raw", 3) == 0) x.type = XF_RAW; |
|
292
|
17 |
124 |
else if (tlen == 3 && memcmp(s, "url", 3) == 0) x.type = XF_URL; |
|
|
2 |
15 |
else if (tlen == 3 && memcmp(s, "url", 3) == 0) x.type = XF_URL; |
|
293
|
37 |
102 |
else if (tlen == 4 && memcmp(s, "json", 4) == 0) x.type = XF_JSON; |
|
|
5 |
32 |
else if (tlen == 4 && memcmp(s, "json", 4) == 0) x.type = XF_JSON; |
|
294
|
32 |
102 |
else if (tlen == 4 && memcmp(s, "trim", 4) == 0) x.type = XF_TRIM; |
|
|
11 |
21 |
else if (tlen == 4 && memcmp(s, "trim", 4) == 0) x.type = XF_TRIM; |
|
295
|
18 |
105 |
else if (tlen == 2 && memcmp(s, "uc", 2) == 0) x.type = XF_UC; |
|
|
8 |
10 |
else if (tlen == 2 && memcmp(s, "uc", 2) == 0) x.type = XF_UC; |
|
296
|
10 |
105 |
else if (tlen == 2 && memcmp(s, "lc", 2) == 0) x.type = XF_LC; |
|
|
6 |
4 |
else if (tlen == 2 && memcmp(s, "lc", 2) == 0) x.type = XF_LC; |
|
297
|
15 |
94 |
else if (tlen == 3 && memcmp(s, "pad", 3) == 0) x.type = XF_PAD; |
|
|
4 |
11 |
else if (tlen == 3 && memcmp(s, "pad", 3) == 0) x.type = XF_PAD; |
|
298
|
21 |
84 |
else if (tlen == 4 && memcmp(s, "rpad", 4) == 0) x.type = XF_RPAD; |
|
|
1 |
20 |
else if (tlen == 4 && memcmp(s, "rpad", 4) == 0) x.type = XF_RPAD; |
|
299
|
10 |
94 |
else if (tlen == 5 && memcmp(s, "trunc", 5) == 0) x.type = XF_TRUNC; |
|
|
3 |
7 |
else if (tlen == 5 && memcmp(s, "trunc", 5) == 0) x.type = XF_TRUNC; |
|
300
|
22 |
79 |
else if (tlen == 7 && memcmp(s, "default", 7) == 0) x.type = XF_DEFAULT; |
|
|
5 |
17 |
else if (tlen == 7 && memcmp(s, "default", 7) == 0) x.type = XF_DEFAULT; |
|
301
|
11 |
85 |
else if (tlen == 3 && memcmp(s, "hex", 3) == 0) x.type = XF_HEX; |
|
|
2 |
9 |
else if (tlen == 3 && memcmp(s, "hex", 3) == 0) x.type = XF_HEX; |
|
302
|
9 |
85 |
else if (tlen == 9 && memcmp(s, "base64url", 9) == 0) x.type = XF_BASE64URL; |
|
|
4 |
5 |
else if (tlen == 9 && memcmp(s, "base64url", 9) == 0) x.type = XF_BASE64URL; |
|
303
|
18 |
72 |
else if (tlen == 6 && memcmp(s, "base64", 6) == 0) x.type = XF_BASE64; |
|
|
4 |
14 |
else if (tlen == 6 && memcmp(s, "base64", 6) == 0) x.type = XF_BASE64; |
|
304
|
7 |
79 |
else if (tlen == 5 && memcmp(s, "count", 5) == 0) x.type = XF_COUNT; |
|
|
6 |
1 |
else if (tlen == 5 && memcmp(s, "count", 5) == 0) x.type = XF_COUNT; |
|
305
|
20 |
60 |
else if (tlen == 4 && memcmp(s, "bool", 4) == 0) x.type = XF_BOOL; |
|
|
7 |
13 |
else if (tlen == 4 && memcmp(s, "bool", 4) == 0) x.type = XF_BOOL; |
|
306
|
13 |
60 |
else if (tlen == 4 && memcmp(s, "date", 4) == 0) x.type = XF_DATE; |
|
|
2 |
11 |
else if (tlen == 4 && memcmp(s, "date", 4) == 0) x.type = XF_DATE; |
|
307
|
17 |
54 |
else if (tlen == 7 && memcmp(s, "sprintf", 7) == 0) x.type = XF_SPRINTF; |
|
|
6 |
11 |
else if (tlen == 7 && memcmp(s, "sprintf", 7) == 0) x.type = XF_SPRINTF; |
|
308
|
11 |
54 |
else if (tlen == 7 && memcmp(s, "replace", 7) == 0) x.type = XF_REPLACE; |
|
|
5 |
6 |
else if (tlen == 7 && memcmp(s, "replace", 7) == 0) x.type = XF_REPLACE; |
|
309
|
14 |
46 |
else if (tlen == 6 && memcmp(s, "substr", 6) == 0) x.type = XF_SUBSTR; |
|
|
4 |
10 |
else if (tlen == 6 && memcmp(s, "substr", 6) == 0) x.type = XF_SUBSTR; |
|
310
|
10 |
46 |
else if (tlen == 6 && memcmp(s, "plural", 6) == 0) x.type = XF_PLURAL; |
|
|
5 |
5 |
else if (tlen == 6 && memcmp(s, "plural", 6) == 0) x.type = XF_PLURAL; |
|
311
|
4 |
47 |
else if (tlen == 2 && memcmp(s, "if", 2) == 0) x.type = XF_IF; |
|
|
4 |
0 |
else if (tlen == 2 && memcmp(s, "if", 2) == 0) x.type = XF_IF; |
|
312
|
5 |
42 |
else if (tlen == 6 && memcmp(s, "unless", 6) == 0) x.type = XF_UNLESS; |
|
|
2 |
3 |
else if (tlen == 6 && memcmp(s, "unless", 6) == 0) x.type = XF_UNLESS; |
|
313
|
9 |
36 |
else if (tlen == 3 && memcmp(s, "map", 3) == 0) x.type = XF_MAP; |
|
|
5 |
4 |
else if (tlen == 3 && memcmp(s, "map", 3) == 0) x.type = XF_MAP; |
|
314
|
11 |
29 |
else if (tlen == 4 && memcmp(s, "wrap", 4) == 0) x.type = XF_WRAP; |
|
|
4 |
7 |
else if (tlen == 4 && memcmp(s, "wrap", 4) == 0) x.type = XF_WRAP; |
|
315
|
5 |
31 |
else if (tlen == 9 && memcmp(s, "number_si", 9) == 0) x.type = XF_NUMBER_SI; |
|
|
5 |
0 |
else if (tlen == 9 && memcmp(s, "number_si", 9) == 0) x.type = XF_NUMBER_SI; |
|
316
|
10 |
21 |
else if (tlen == 8 && memcmp(s, "bytes_si", 8) == 0) x.type = XF_BYTES_SI; |
|
|
5 |
5 |
else if (tlen == 8 && memcmp(s, "bytes_si", 8) == 0) x.type = XF_BYTES_SI; |
|
317
|
6 |
20 |
else if (tlen == 7 && memcmp(s, "elapsed", 7) == 0) x.type = XF_ELAPSED; |
|
|
6 |
0 |
else if (tlen == 7 && memcmp(s, "elapsed", 7) == 0) x.type = XF_ELAPSED; |
|
318
|
4 |
16 |
else if (tlen == 3 && memcmp(s, "ago", 3) == 0) x.type = XF_AGO; |
|
|
4 |
0 |
else if (tlen == 3 && memcmp(s, "ago", 3) == 0) x.type = XF_AGO; |
|
319
|
7 |
9 |
else if (tlen == 4 && memcmp(s, "mask", 4) == 0) { x.type = XF_MASK; x.param_int = 4; } |
|
|
7 |
0 |
else if (tlen == 4 && memcmp(s, "mask", 4) == 0) { x.type = XF_MASK; x.param_int = 4; } |
|
320
|
3 |
6 |
else if (tlen == 6 && memcmp(s, "length", 6) == 0) x.type = XF_LENGTH; |
|
|
3 |
0 |
else if (tlen == 6 && memcmp(s, "length", 6) == 0) x.type = XF_LENGTH; |
|
321
|
5 |
1 |
else if (tlen == 8 && memcmp(s, "coalesce", 8) == 0) x.type = XF_COALESCE; |
|
|
5 |
0 |
else if (tlen == 8 && memcmp(s, "coalesce", 8) == 0) x.type = XF_COALESCE; |
|
323
|
66 |
169 |
if (param && plen == 0 && x.type == XF_DEFAULT) { |
|
|
1 |
65 |
if (param && plen == 0 && x.type == XF_DEFAULT) { |
|
|
1 |
0 |
if (param && plen == 0 && x.type == XF_DEFAULT) { |
|
327
|
65 |
169 |
} else if (param && plen > 0) { |
|
|
65 |
0 |
} else if (param && plen > 0) { |
|
328
|
63 |
2 |
if (x.type == XF_FLOAT || x.type == XF_PAD || x.type == XF_RPAD || x.type == XF_TRUNC || x.type == XF_MASK) { |
|
|
59 |
4 |
if (x.type == XF_FLOAT || x.type == XF_PAD || x.type == XF_RPAD || x.type == XF_TRUNC || x.type == XF_MASK) { |
|
|
58 |
1 |
if (x.type == XF_FLOAT || x.type == XF_PAD || x.type == XF_RPAD || x.type == XF_TRUNC || x.type == XF_MASK) { |
|
|
55 |
3 |
if (x.type == XF_FLOAT || x.type == XF_PAD || x.type == XF_RPAD || x.type == XF_TRUNC || x.type == XF_MASK) { |
|
|
5 |
50 |
if (x.type == XF_FLOAT || x.type == XF_PAD || x.type == XF_RPAD || x.type == XF_TRUNC || x.type == XF_MASK) { |
|
330
|
18 |
15 |
for (int i = 0; i < plen; i++) x.param_int = x.param_int * 10 + (param[i] - '0'); |
|
331
|
6 |
44 |
} else if (x.type == XF_SPRINTF) { |
|
336
|
5 |
39 |
} else if (x.type == XF_REPLACE) { |
|
338
|
5 |
0 |
if (c2) { |
|
341
|
4 |
1 |
if (p1len > 0) { |
|
350
|
4 |
35 |
} else if (x.type == XF_SUBSTR) { |
|
353
|
1 |
3 |
int p1len = c2 ? (int)(c2 - param) : plen; |
|
354
|
6 |
4 |
for (int i = 0; i < p1len; i++) x.param_int = x.param_int * 10 + (param[i] - '0'); |
|
356
|
1 |
3 |
if (c2) { |
|
359
|
1 |
1 |
for (int i = 0; i < p2len; i++) x.param_int2 = x.param_int2 * 10 + (c2[1+i] - '0'); |
|
361
|
5 |
30 |
} else if (x.type == XF_PLURAL) { |
|
363
|
5 |
0 |
if (c2) { |
|
373
|
26 |
4 |
} else if (x.type == XF_IF || x.type == XF_UNLESS) { |
|
|
2 |
24 |
} else if (x.type == XF_IF || x.type == XF_UNLESS) { |
|
377
|
4 |
20 |
} else if (x.type == XF_WRAP) { |
|
379
|
3 |
1 |
if (c2) { |
|
393
|
5 |
15 |
} else if (x.type == XF_MAP) { |
|
395
|
8 |
83 |
for (int i = 0; i < plen; i++) if (param[i] == ':') cnt++; |
|
|
91 |
5 |
for (int i = 0; i < plen; i++) if (param[i] == ':') cnt++; |
|
402
|
13 |
5 |
while (p2 < pe) { |
|
404
|
5 |
8 |
if (!next) next = pe; |
|
406
|
13 |
0 |
if (eq) { |
|
414
|
5 |
10 |
} else if (x.type == XF_COALESCE) { |
|
419
|
6 |
4 |
} else if (x.type == XF_DEFAULT || x.type == XF_DATE) { |
|
|
1 |
5 |
} else if (x.type == XF_DEFAULT || x.type == XF_DATE) { |
|
424
|
5 |
0 |
} else if (x.type == XF_BOOL) { |
|
426
|
5 |
0 |
if (c2) { |
|
451
|
487 |
6 |
for (int i = 0; i < spec_len; i++) { |
|
452
|
271 |
216 |
if (spec[i] == ':' || spec[i] == '|') { sep = spec + i; break; } |
|
|
0 |
271 |
if (spec[i] == ':' || spec[i] == '|') { sep = spec + i; break; } |
|
456
|
216 |
6 |
int field_len = sep ? (int)(sep - spec) : spec_len; |
|
459
|
201 |
21 |
if (field_len == 1 && field[0] == '#') { |
|
|
5 |
196 |
if (field_len == 1 && field[0] == '#') { |
|
462
|
3 |
2 |
if (!sep) { |
|
473
|
217 |
0 |
if (field_len > 0 && field[0] == '-') { is_neg = 1; start_idx = 1; } |
|
|
3 |
214 |
if (field_len > 0 && field[0] == '-') { is_neg = 1; start_idx = 1; } |
|
474
|
217 |
198 |
for (int i = start_idx; i < field_len; i++) |
|
475
|
217 |
0 |
if (field[i] < '0' || field[i] > '9') { is_num = 0; break; } |
|
|
19 |
198 |
if (field[i] < '0' || field[i] > '9') { is_num = 0; break; } |
|
477
|
198 |
19 |
if (is_num && field_len > start_idx) { |
|
|
198 |
0 |
if (is_num && field_len > start_idx) { |
|
479
|
198 |
198 |
for (int i = start_idx; i < field_len; i++) op->col = op->col * 10 + (field[i] - '0'); |
|
480
|
3 |
195 |
if (is_neg) op->col = -op->col; |
|
490
|
3 |
214 |
if (!sep) { |
|
499
|
0 |
216 |
if (*xforms_start == ':' || *xforms_start == '|') xforms_start++; |
|
|
0 |
0 |
if (*xforms_start == ':' || *xforms_start == '|') xforms_start++; |
|
504
|
19 |
1489 |
for (int i = 0; i < xforms_len; i++) if (xforms_start[i] == '|') nxforms++; |
|
|
1508 |
216 |
for (int i = 0; i < xforms_len; i++) if (xforms_start[i] == '|') nxforms++; |
|
511
|
235 |
216 |
while (p < xend) { |
|
513
|
216 |
19 |
if (!pipe) pipe = xend; |
|
521
|
19 |
214 |
for (int i = 1; i < op->chain_len; i++) { |
|
522
|
1 |
18 |
if (op->chain[i].type == XF_COUNT) |
|
524
|
1 |
17 |
if (op->chain[i].type == XF_COALESCE) |
|
535
|
12 |
196 |
if (hlen) { t->header = (char *)malloc(hlen); memcpy(t->header, header, hlen); } t->header_len = hlen; |
|
536
|
12 |
196 |
if (flen) { t->footer = (char *)malloc(flen); memcpy(t->footer, footer, flen); } t->footer_len = flen; |
|
537
|
30 |
178 |
if (slen) { t->sep = (char *)malloc(slen); memcpy(t->sep, sep, slen); t->sep_len = slen; } |
|
539
|
7 |
201 |
t->escape_char = esc_char ? esc_char : '{'; |
|
545
|
5 |
203 |
char close_char = (t->escape_char == '{') ? '}' : t->escape_char; |
|
546
|
3 |
205 |
if (t->escape_char == '[') close_char = ']'; |
|
547
|
0 |
208 |
if (t->escape_char == '(') close_char = ')'; |
|
548
|
1 |
207 |
if (t->escape_char == '<') close_char = '>'; |
|
551
|
242 |
189 |
while (p < end) { |
|
553
|
17 |
225 |
if (!brace) brace = end; |
|
554
|
45 |
197 |
if (brace > p) { |
|
555
|
0 |
45 |
if (t->nops >= cap) { cap *= 2; t->ops = (tpl_op *)realloc(t->ops, cap * sizeof(tpl_op)); if (!t->ops) croak("realloc"); memset(&t->ops[cap/2], 0, (cap/2)*sizeof(tpl_op)); } |
|
|
0 |
0 |
if (t->nops >= cap) { cap *= 2; t->ops = (tpl_op *)realloc(t->ops, cap * sizeof(tpl_op)); if (!t->ops) croak("realloc"); memset(&t->ops[cap/2], 0, (cap/2)*sizeof(tpl_op)); } |
|
562
|
17 |
225 |
if (brace >= end) break; |
|
565
|
225 |
0 |
if (brace + 1 < end && brace[1] == t->escape_char) { |
|
|
3 |
222 |
if (brace + 1 < end && brace[1] == t->escape_char) { |
|
566
|
0 |
3 |
if (t->nops >= cap) { cap *= 2; t->ops = (tpl_op *)realloc(t->ops, cap * sizeof(tpl_op)); if (!t->ops) croak("realloc"); memset(&t->ops[cap/2], 0, (cap/2)*sizeof(tpl_op)); } |
|
|
0 |
0 |
if (t->nops >= cap) { cap *= 2; t->ops = (tpl_op *)realloc(t->ops, cap * sizeof(tpl_op)); if (!t->ops) croak("realloc"); memset(&t->ops[cap/2], 0, (cap/2)*sizeof(tpl_op)); } |
|
577
|
0 |
222 |
if (!close) break; |
|
579
|
0 |
222 |
if (t->nops >= cap) { cap *= 2; t->ops = (tpl_op *)realloc(t->ops, cap * sizeof(tpl_op)); if (!t->ops) croak("realloc"); memset(&t->ops[cap/2], 0, (cap/2)*sizeof(tpl_op)); } |
|
|
0 |
0 |
if (t->nops >= cap) { cap *= 2; t->ops = (tpl_op *)realloc(t->ops, cap * sizeof(tpl_op)); if (!t->ops) croak("realloc"); memset(&t->ops[cap/2], 0, (cap/2)*sizeof(tpl_op)); } |
|
615
|
110 |
10456 |
if (mode == ROW_HASH) { |
|
616
|
110 |
0 |
if (!SvROK(row_sv) || SvTYPE(SvRV(row_sv)) != SVt_PVHV) return NULL; |
|
|
0 |
110 |
if (!SvROK(row_sv) || SvTYPE(SvRV(row_sv)) != SVt_PVHV) return NULL; |
|
618
|
110 |
0 |
return sv ? *sv : NULL; |
|
620
|
10456 |
0 |
if (!SvROK(row_sv) || SvTYPE(SvRV(row_sv)) != SVt_PVAV) return NULL; |
|
|
0 |
10456 |
if (!SvROK(row_sv) || SvTYPE(SvRV(row_sv)) != SVt_PVAV) return NULL; |
|
623
|
0 |
10456 |
SSize_t top = av_top_index(av); |
|
625
|
3 |
10453 |
if (col < 0) col = (int)(top + 1) + col; |
|
626
|
10456 |
0 |
if (col >= 0 && col <= (int)top) return ary[col]; |
|
|
10456 |
0 |
if (col >= 0 && col <= (int)top) return ary[col]; |
|
648
|
0 |
0 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
650
|
0 |
0 |
for (STRLEN i = 0; i < slen; i++) { |
|
651
|
0 |
0 |
if (src[i] == '-') neg = 1; |
|
652
|
0 |
0 |
else if (src[i] >= '0' && src[i] <= '9') v = v * 10 + (src[i] - '0'); |
|
|
0 |
0 |
else if (src[i] >= '0' && src[i] <= '9') v = v * 10 + (src[i] - '0'); |
|
654
|
0 |
0 |
if (neg) v = -v; |
|
655
|
0 |
0 |
int w = itoa_fast(OUT_PTR, v); |
|
656
|
0 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
660
|
1001 |
0 |
OUT_ENSURE(28); |
|
|
0 |
1001 |
OUT_ENSURE(28); |
|
|
0 |
0 |
OUT_ENSURE(28); |
|
|
0 |
0 |
OUT_ENSURE(28); |
|
|
0 |
0 |
OUT_ENSURE(28); |
|
|
0 |
0 |
OUT_ENSURE(28); |
|
662
|
2894 |
1001 |
for (STRLEN i = 0; i < slen; i++) { |
|
663
|
0 |
2894 |
if (src[i] == '-') neg = 1; |
|
664
|
2894 |
0 |
else if (src[i] >= '0' && src[i] <= '9') v = v * 10 + (src[i] - '0'); |
|
|
2894 |
0 |
else if (src[i] >= '0' && src[i] <= '9') v = v * 10 + (src[i] - '0'); |
|
666
|
0 |
1001 |
if (neg) v = -v; |
|
667
|
1001 |
0 |
int w = itoa_comma(OUT_PTR, v); |
|
668
|
1001 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
672
|
0 |
0 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
674
|
0 |
0 |
{ char tb[64]; int tl = slen < 63 ? (int)slen : 63; memcpy(tb, src, tl); tb[tl] = 0; fv = atof(tb); } |
|
675
|
0 |
0 |
int w = snprintf(OUT_PTR, 64, "%.*f", xf->param_int, fv); |
|
676
|
0 |
0 |
if (w > 63) w = 63; |
|
677
|
0 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
681
|
32 |
0 |
OUT_ENSURE(slen * 6); |
|
|
1 |
31 |
OUT_ENSURE(slen * 6); |
|
|
0 |
1 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
683
|
100672 |
17 |
for (STRLEN i = 0; i < slen; i++) |
|
684
|
15 |
100657 |
if (html_special[(unsigned char)src[i]]) { needs_escape = 1; break; } |
|
685
|
17 |
15 |
if (!needs_escape) { |
|
686
|
17 |
0 |
memcpy(OUT_PTR, src, slen); |
|
687
|
17 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
689
|
15 |
0 |
int w = html_escape(OUT_PTR, src, slen); |
|
690
|
15 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
695
|
1 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
1 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
697
|
6 |
0 |
for (STRLEN i = 0; i < slen; i++) |
|
698
|
1 |
5 |
if (html_br_special[(unsigned char)src[i]]) { needs_escape = 1; break; } |
|
699
|
0 |
1 |
if (!needs_escape) { |
|
700
|
0 |
0 |
memcpy(OUT_PTR, src, slen); |
|
701
|
0 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
703
|
1 |
0 |
int w = html_br_escape(OUT_PTR, src, slen); |
|
704
|
1 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
709
|
1 |
0 |
OUT_ENSURE(slen * 3); |
|
|
0 |
1 |
OUT_ENSURE(slen * 3); |
|
|
0 |
0 |
OUT_ENSURE(slen * 3); |
|
|
0 |
0 |
OUT_ENSURE(slen * 3); |
|
|
0 |
0 |
OUT_ENSURE(slen * 3); |
|
|
0 |
0 |
OUT_ENSURE(slen * 3); |
|
|
0 |
0 |
OUT_ENSURE(slen * 3); |
|
710
|
1 |
0 |
int w = url_escape(OUT_PTR, src, slen); |
|
711
|
1 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
715
|
4 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
4 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
|
0 |
0 |
OUT_ENSURE(slen * 6); |
|
717
|
24 |
1 |
for (STRLEN i = 0; i < slen; i++) |
|
718
|
3 |
21 |
if (json_special[(unsigned char)src[i]]) { needs_escape = 1; break; } |
|
719
|
1 |
3 |
if (!needs_escape) { |
|
720
|
1 |
0 |
memcpy(OUT_PTR, src, slen); |
|
721
|
1 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
723
|
3 |
0 |
int w = json_escape(OUT_PTR, src, slen); |
|
724
|
3 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
730
|
21 |
0 |
while (l > 0 && (*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r')) { s++; l--; } |
|
|
12 |
9 |
while (l > 0 && (*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r')) { s++; l--; } |
|
|
0 |
9 |
while (l > 0 && (*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r')) { s++; l--; } |
|
|
0 |
9 |
while (l > 0 && (*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r')) { s++; l--; } |
|
|
0 |
9 |
while (l > 0 && (*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r')) { s++; l--; } |
|
731
|
22 |
0 |
while (l > 0 && (s[l-1] == ' ' || s[l-1] == '\t' || s[l-1] == '\n' || s[l-1] == '\r')) l--; |
|
|
12 |
10 |
while (l > 0 && (s[l-1] == ' ' || s[l-1] == '\t' || s[l-1] == '\n' || s[l-1] == '\r')) l--; |
|
|
0 |
10 |
while (l > 0 && (s[l-1] == ' ' || s[l-1] == '\t' || s[l-1] == '\n' || s[l-1] == '\r')) l--; |
|
|
1 |
9 |
while (l > 0 && (s[l-1] == ' ' || s[l-1] == '\t' || s[l-1] == '\n' || s[l-1] == '\r')) l--; |
|
|
0 |
9 |
while (l > 0 && (s[l-1] == ' ' || s[l-1] == '\t' || s[l-1] == '\n' || s[l-1] == '\r')) l--; |
|
732
|
1 |
8 |
OUT_ENSURE(l); |
|
|
0 |
1 |
OUT_ENSURE(l); |
|
|
0 |
0 |
OUT_ENSURE(l); |
|
|
2 |
6 |
OUT_ENSURE(l); |
|
|
0 |
2 |
OUT_ENSURE(l); |
|
|
6 |
0 |
OUT_ENSURE(l); |
|
|
0 |
6 |
OUT_ENSURE(l); |
|
733
|
1 |
8 |
memcpy(OUT_PTR, s, l); |
|
734
|
1 |
8 |
if (to_output) pos += l; else tmp_len = l; |
|
738
|
5 |
1 |
OUT_ENSURE(slen); |
|
|
0 |
5 |
OUT_ENSURE(slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); |
|
|
1 |
0 |
OUT_ENSURE(slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); |
|
739
|
19 |
9 |
for (STRLEN i = 0; i < slen; i++) OUT_PTR[i] = toupper((unsigned char)src[i]); |
|
|
28 |
6 |
for (STRLEN i = 0; i < slen; i++) OUT_PTR[i] = toupper((unsigned char)src[i]); |
|
740
|
5 |
1 |
if (to_output) pos += slen; else tmp_len = slen; |
|
744
|
2 |
3 |
OUT_ENSURE(slen); |
|
|
0 |
2 |
OUT_ENSURE(slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); |
|
|
2 |
1 |
OUT_ENSURE(slen); |
|
|
0 |
2 |
OUT_ENSURE(slen); |
|
|
1 |
0 |
OUT_ENSURE(slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); |
|
745
|
9 |
24 |
for (STRLEN i = 0; i < slen; i++) OUT_PTR[i] = tolower((unsigned char)src[i]); |
|
|
33 |
5 |
for (STRLEN i = 0; i < slen; i++) OUT_PTR[i] = tolower((unsigned char)src[i]); |
|
746
|
2 |
3 |
if (to_output) pos += slen; else tmp_len = slen; |
|
751
|
4 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
3 |
1 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
4 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
753
|
3 |
1 |
if (pad > 0) { memset(OUT_PTR, ' ', pad); memcpy(OUT_PTR + pad, src, slen); } |
|
|
3 |
0 |
if (pad > 0) { memset(OUT_PTR, ' ', pad); memcpy(OUT_PTR + pad, src, slen); } |
|
|
3 |
0 |
if (pad > 0) { memset(OUT_PTR, ' ', pad); memcpy(OUT_PTR + pad, src, slen); } |
|
754
|
1 |
0 |
else memcpy(OUT_PTR, src, slen); |
|
755
|
1 |
3 |
int total = pad > 0 ? w : (int)slen; |
|
756
|
4 |
0 |
if (to_output) pos += total; else tmp_len = total; |
|
761
|
1 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
1 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
1 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
|
0 |
0 |
OUT_ENSURE(w > (int)slen ? w : slen); |
|
762
|
1 |
0 |
memcpy(OUT_PTR, src, slen); |
|
764
|
1 |
0 |
if (pad > 0) memset(OUT_PTR + slen, ' ', pad); |
|
|
1 |
0 |
if (pad > 0) memset(OUT_PTR + slen, ' ', pad); |
|
765
|
0 |
1 |
int total = pad > 0 ? w : (int)slen; |
|
766
|
1 |
0 |
if (to_output) pos += total; else tmp_len = total; |
|
771
|
1 |
2 |
if ((int)slen <= mx) { |
|
772
|
1 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
1 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
773
|
1 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
776
|
1 |
1 |
OUT_ENSURE(tl + 3); |
|
|
0 |
1 |
OUT_ENSURE(tl + 3); |
|
|
0 |
0 |
OUT_ENSURE(tl + 3); |
|
|
0 |
1 |
OUT_ENSURE(tl + 3); |
|
|
0 |
0 |
OUT_ENSURE(tl + 3); |
|
|
1 |
0 |
OUT_ENSURE(tl + 3); |
|
|
0 |
1 |
OUT_ENSURE(tl + 3); |
|
777
|
1 |
1 |
memcpy(OUT_PTR, src, tl); |
|
778
|
1 |
1 |
memcpy(OUT_PTR + tl, "...", 3); |
|
779
|
1 |
1 |
if (to_output) pos += tl + 3; else tmp_len = tl + 3; |
|
784
|
1 |
0 |
OUT_ENSURE(slen * 2); |
|
|
0 |
1 |
OUT_ENSURE(slen * 2); |
|
|
0 |
0 |
OUT_ENSURE(slen * 2); |
|
|
0 |
0 |
OUT_ENSURE(slen * 2); |
|
|
0 |
0 |
OUT_ENSURE(slen * 2); |
|
|
0 |
0 |
OUT_ENSURE(slen * 2); |
|
|
0 |
0 |
OUT_ENSURE(slen * 2); |
|
785
|
1 |
0 |
int w = hex_encode(OUT_PTR, src, slen); |
|
786
|
1 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
790
|
7 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
7 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
791
|
7 |
0 |
int w = base64_encode(OUT_PTR, (const unsigned char *)src, slen); |
|
792
|
7 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
796
|
3 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
3 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
|
0 |
0 |
OUT_ENSURE(((slen + 2) / 3) * 4); |
|
797
|
3 |
0 |
int w = base64url_encode(OUT_PTR, (const unsigned char *)src, slen); |
|
798
|
3 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
805
|
0 |
0 |
OUT_ENSURE(12); |
|
|
0 |
0 |
OUT_ENSURE(12); |
|
|
0 |
0 |
OUT_ENSURE(12); |
|
|
0 |
0 |
OUT_ENSURE(12); |
|
|
0 |
0 |
OUT_ENSURE(12); |
|
|
0 |
0 |
OUT_ENSURE(12); |
|
806
|
0 |
0 |
int w = itoa_fast(OUT_PTR, xf->param_int); |
|
807
|
0 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
812
|
4 |
3 |
if (slen == 1 && src[0] == '0') truthy = 0; |
|
|
3 |
1 |
if (slen == 1 && src[0] == '0') truthy = 0; |
|
814
|
3 |
4 |
if (truthy) { |
|
815
|
2 |
1 |
val = xf->param_str ? xf->param_str : "true"; |
|
816
|
2 |
1 |
vlen = xf->param_str ? xf->param_str_len : 4; |
|
818
|
3 |
1 |
val = xf->param_str2 ? xf->param_str2 : "false"; |
|
819
|
3 |
1 |
vlen = xf->param_str2 ? xf->param_str2_len : 5; |
|
821
|
7 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
7 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
7 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
822
|
7 |
0 |
if (to_output) pos += vlen; else tmp_len = vlen; |
|
827
|
11 |
2 |
for (STRLEN i = 0; i < slen; i++) { |
|
828
|
11 |
0 |
if (src[i] >= '0' && src[i] <= '9') epoch = epoch * 10 + (src[i] - '0'); |
|
|
11 |
0 |
if (src[i] >= '0' && src[i] <= '9') epoch = epoch * 10 + (src[i] - '0'); |
|
832
|
1 |
1 |
const char *fmt = xf->param_str ? xf->param_str : "%Y-%m-%d %H:%M:%S"; |
|
833
|
2 |
0 |
OUT_ENSURE(256); |
|
|
0 |
2 |
OUT_ENSURE(256); |
|
|
0 |
0 |
OUT_ENSURE(256); |
|
|
0 |
0 |
OUT_ENSURE(256); |
|
|
0 |
0 |
OUT_ENSURE(256); |
|
|
0 |
0 |
OUT_ENSURE(256); |
|
834
|
2 |
0 |
int w = (int)strftime(OUT_PTR, 256, fmt, &tm); |
|
835
|
2 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
839
|
6 |
0 |
OUT_ENSURE(256); |
|
|
0 |
6 |
OUT_ENSURE(256); |
|
|
0 |
0 |
OUT_ENSURE(256); |
|
|
0 |
0 |
OUT_ENSURE(256); |
|
|
0 |
0 |
OUT_ENSURE(256); |
|
|
0 |
0 |
OUT_ENSURE(256); |
|
840
|
6 |
0 |
if (xf->param_str && xf->param_str_len > 0) { |
|
|
6 |
0 |
if (xf->param_str && xf->param_str_len > 0) { |
|
842
|
5 |
1 |
if (last != 'd' && last != 'i' && last != 'x' && last != 'X' && |
|
|
5 |
0 |
if (last != 'd' && last != 'i' && last != 'x' && last != 'X' && |
|
|
4 |
1 |
if (last != 'd' && last != 'i' && last != 'x' && last != 'X' && |
|
|
4 |
0 |
if (last != 'd' && last != 'i' && last != 'x' && last != 'X' && |
|
|
4 |
0 |
if (last != 'd' && last != 'i' && last != 'x' && last != 'X' && |
|
843
|
4 |
0 |
last != 'o' && last != 'u' && last != 'f' && last != 'e' && |
|
|
3 |
1 |
last != 'o' && last != 'u' && last != 'f' && last != 'e' && |
|
|
3 |
0 |
last != 'o' && last != 'u' && last != 'f' && last != 'e' && |
|
|
3 |
0 |
last != 'o' && last != 'u' && last != 'f' && last != 'e' && |
|
844
|
1 |
2 |
last != 'g' && last != 's') { |
|
845
|
1 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
1 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
846
|
1 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
851
|
5 |
0 |
xf->param_str[0] == '%' ? "" : "%", xf->param_str); |
|
852
|
0 |
5 |
if (fmtlen >= (int)sizeof(fmtbuf)) { |
|
853
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
854
|
0 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
858
|
21 |
5 |
for (int fi = 0; fi < fmtlen && fmtbuf[fi]; fi++) { |
|
|
21 |
0 |
for (int fi = 0; fi < fmtlen && fmtbuf[fi]; fi++) { |
|
859
|
6 |
15 |
if (fmtbuf[fi] == '%') { if (fi + 1 < fmtlen && fmtbuf[fi+1] == '%') fi++; else pct_count++; } |
|
|
6 |
0 |
if (fmtbuf[fi] == '%') { if (fi + 1 < fmtlen && fmtbuf[fi+1] == '%') fi++; else pct_count++; } |
|
|
0 |
6 |
if (fmtbuf[fi] == '%') { if (fi + 1 < fmtlen && fmtbuf[fi+1] == '%') fi++; else pct_count++; } |
|
860
|
0 |
15 |
else if (fmtbuf[fi] == '*') has_star = 1; |
|
862
|
4 |
1 |
if (pct_count != 1 || has_star) { |
|
|
0 |
4 |
if (pct_count != 1 || has_star) { |
|
863
|
1 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
1 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
864
|
1 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
868
|
3 |
1 |
if (last == 'd' || last == 'i' || last == 'x' || last == 'X' || last == 'o' || last == 'u') { |
|
|
3 |
0 |
if (last == 'd' || last == 'i' || last == 'x' || last == 'X' || last == 'o' || last == 'u') { |
|
|
2 |
1 |
if (last == 'd' || last == 'i' || last == 'x' || last == 'X' || last == 'o' || last == 'u') { |
|
|
2 |
0 |
if (last == 'd' || last == 'i' || last == 'x' || last == 'X' || last == 'o' || last == 'u') { |
|
|
2 |
0 |
if (last == 'd' || last == 'i' || last == 'x' || last == 'X' || last == 'o' || last == 'u') { |
|
|
0 |
2 |
if (last == 'd' || last == 'i' || last == 'x' || last == 'X' || last == 'o' || last == 'u') { |
|
870
|
5 |
2 |
for (STRLEN i = 0; i < slen; i++) { |
|
871
|
0 |
5 |
if (src[i] == '-') neg = 1; |
|
872
|
5 |
0 |
else if (src[i] >= '0' && src[i] <= '9') lv = lv * 10 + (src[i] - '0'); |
|
|
5 |
0 |
else if (src[i] >= '0' && src[i] <= '9') lv = lv * 10 + (src[i] - '0'); |
|
874
|
0 |
2 |
if (neg) lv = -lv; |
|
875
|
2 |
0 |
w = snprintf(OUT_PTR, 256, fmtbuf, lv); |
|
876
|
1 |
1 |
} else if (last == 'f' || last == 'e' || last == 'g') { |
|
|
1 |
0 |
} else if (last == 'f' || last == 'e' || last == 'g') { |
|
|
0 |
1 |
} else if (last == 'f' || last == 'e' || last == 'g') { |
|
877
|
1 |
0 |
char tb[64]; int tl = slen < 63 ? (int)slen : 63; |
|
879
|
1 |
0 |
w = snprintf(OUT_PTR, 256, fmtbuf, atof(tb)); |
|
881
|
1 |
0 |
char tb[256]; int tl = slen < 255 ? (int)slen : 255; |
|
883
|
1 |
0 |
w = snprintf(OUT_PTR, 256, fmtbuf, tb); |
|
885
|
0 |
4 |
if (w > 255) w = 255; |
|
886
|
4 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
891
|
1 |
4 |
if (!xf->param_str) { |
|
892
|
1 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
1 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
893
|
1 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
898
|
4 |
0 |
const char *repl = xf->param_str2 ? xf->param_str2 : ""; |
|
899
|
4 |
0 |
STRLEN rlen = xf->param_str2 ? xf->param_str2_len : 0; |
|
900
|
4 |
0 |
OUT_ENSURE(slen * (rlen + 1)); |
|
|
0 |
4 |
OUT_ENSURE(slen * (rlen + 1)); |
|
|
0 |
0 |
OUT_ENSURE(slen * (rlen + 1)); |
|
|
0 |
0 |
OUT_ENSURE(slen * (rlen + 1)); |
|
|
0 |
0 |
OUT_ENSURE(slen * (rlen + 1)); |
|
|
0 |
0 |
OUT_ENSURE(slen * (rlen + 1)); |
|
|
0 |
0 |
OUT_ENSURE(slen * (rlen + 1)); |
|
901
|
4 |
0 |
char *out = OUT_PTR; |
|
904
|
19 |
4 |
while (i < slen) { |
|
905
|
18 |
1 |
if (i + nlen <= slen && memcmp(src + i, needle, nlen) == 0) { |
|
|
7 |
11 |
if (i + nlen <= slen && memcmp(src + i, needle, nlen) == 0) { |
|
912
|
4 |
0 |
if (to_output) pos += opos; else tmp_len = opos; |
|
918
|
3 |
1 |
if (start < 0 || start >= (int)slen) { |
|
|
1 |
2 |
if (start < 0 || start >= (int)slen) { |
|
919
|
0 |
2 |
if (!to_output) tmp_len = 0; |
|
924
|
1 |
1 |
if (maxlen >= 0 && (int)l > maxlen) l = maxlen; |
|
|
1 |
0 |
if (maxlen >= 0 && (int)l > maxlen) l = maxlen; |
|
925
|
2 |
0 |
OUT_ENSURE(l); memcpy(OUT_PTR, s, l); |
|
|
0 |
2 |
OUT_ENSURE(l); memcpy(OUT_PTR, s, l); |
|
|
0 |
0 |
OUT_ENSURE(l); memcpy(OUT_PTR, s, l); |
|
|
0 |
0 |
OUT_ENSURE(l); memcpy(OUT_PTR, s, l); |
|
|
0 |
0 |
OUT_ENSURE(l); memcpy(OUT_PTR, s, l); |
|
|
0 |
0 |
OUT_ENSURE(l); memcpy(OUT_PTR, s, l); |
|
|
0 |
0 |
OUT_ENSURE(l); memcpy(OUT_PTR, s, l); |
|
|
2 |
0 |
OUT_ENSURE(l); memcpy(OUT_PTR, s, l); |
|
926
|
2 |
0 |
if (to_output) pos += l; else tmp_len = l; |
|
931
|
5 |
0 |
STRLEN pi = (slen > 0 && src[0] == '-') ? 1 : 0; |
|
|
1 |
4 |
STRLEN pi = (slen > 0 && src[0] == '-') ? 1 : 0; |
|
932
|
5 |
5 |
for (STRLEN i = pi; i < slen; i++) |
|
933
|
5 |
0 |
if (src[i] >= '0' && src[i] <= '9') v = v * 10 + (src[i] - '0'); |
|
|
5 |
0 |
if (src[i] >= '0' && src[i] <= '9') v = v * 10 + (src[i] - '0'); |
|
934
|
1 |
4 |
if (pi) v = -v; /* preserve sign: -1 is plural, and itoa keeps the '-' */ |
|
936
|
2 |
3 |
if (v == 1) { |
|
937
|
2 |
0 |
form = xf->param_str ? xf->param_str : ""; flen = xf->param_str_len; |
|
939
|
3 |
0 |
form = xf->param_str2 ? xf->param_str2 : "s"; flen = xf->param_str2 ? xf->param_str2_len : 1; |
|
|
3 |
0 |
form = xf->param_str2 ? xf->param_str2 : "s"; flen = xf->param_str2 ? xf->param_str2_len : 1; |
|
941
|
5 |
0 |
OUT_ENSURE(20 + 1 + flen); |
|
|
0 |
5 |
OUT_ENSURE(20 + 1 + flen); |
|
|
0 |
0 |
OUT_ENSURE(20 + 1 + flen); |
|
|
0 |
0 |
OUT_ENSURE(20 + 1 + flen); |
|
|
0 |
0 |
OUT_ENSURE(20 + 1 + flen); |
|
|
0 |
0 |
OUT_ENSURE(20 + 1 + flen); |
|
|
0 |
0 |
OUT_ENSURE(20 + 1 + flen); |
|
942
|
5 |
0 |
int nw = itoa_fast(OUT_PTR, v); |
|
943
|
5 |
0 |
OUT_PTR[nw] = ' '; |
|
944
|
5 |
0 |
memcpy(OUT_PTR + nw + 1, form, flen); |
|
946
|
5 |
0 |
if (to_output) pos += total; else tmp_len = total; |
|
950
|
2 |
2 |
int truthy = (slen > 0 && !(slen == 1 && src[0] == '0')); |
|
|
2 |
0 |
int truthy = (slen > 0 && !(slen == 1 && src[0] == '0')); |
|
|
1 |
1 |
int truthy = (slen > 0 && !(slen == 1 && src[0] == '0')); |
|
951
|
1 |
3 |
if (truthy && xf->param_str) { |
|
|
1 |
0 |
if (truthy && xf->param_str) { |
|
952
|
1 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
1 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
953
|
1 |
0 |
memcpy(OUT_PTR, xf->param_str, xf->param_str_len); |
|
954
|
1 |
0 |
if (to_output) pos += xf->param_str_len; else tmp_len = xf->param_str_len; |
|
956
|
0 |
3 |
if (!to_output) tmp_len = 0; |
|
961
|
1 |
1 |
int truthy = (slen > 0 && !(slen == 1 && src[0] == '0')); |
|
|
1 |
0 |
int truthy = (slen > 0 && !(slen == 1 && src[0] == '0')); |
|
|
1 |
0 |
int truthy = (slen > 0 && !(slen == 1 && src[0] == '0')); |
|
962
|
1 |
1 |
if (!truthy && xf->param_str) { |
|
|
1 |
0 |
if (!truthy && xf->param_str) { |
|
963
|
1 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
1 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
|
0 |
0 |
OUT_ENSURE(xf->param_str_len); |
|
964
|
1 |
0 |
memcpy(OUT_PTR, xf->param_str, xf->param_str_len); |
|
965
|
1 |
0 |
if (to_output) pos += xf->param_str_len; else tmp_len = xf->param_str_len; |
|
967
|
0 |
1 |
if (!to_output) tmp_len = 0; |
|
973
|
10 |
2 |
for (int mi = 0; mi < xf->map_count; mi++) { |
|
974
|
10 |
0 |
if ((xf->map_key_lens[mi] == slen && memcmp(xf->map_keys[mi], src, slen) == 0) || |
|
|
7 |
3 |
if ((xf->map_key_lens[mi] == slen && memcmp(xf->map_keys[mi], src, slen) == 0) || |
|
975
|
7 |
0 |
(xf->map_key_lens[mi] == 1 && xf->map_keys[mi][0] == '*')) { |
|
|
2 |
5 |
(xf->map_key_lens[mi] == 1 && xf->map_keys[mi][0] == '*')) { |
|
977
|
5 |
0 |
if (xf->map_key_lens[mi] != 1 || xf->map_keys[mi][0] != '*') break; |
|
|
2 |
3 |
if (xf->map_key_lens[mi] != 1 || xf->map_keys[mi][0] != '*') break; |
|
980
|
5 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
5 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
0 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
|
5 |
0 |
OUT_ENSURE(vlen); memcpy(OUT_PTR, val, vlen); |
|
981
|
5 |
0 |
if (to_output) pos += vlen; else tmp_len = vlen; |
|
985
|
2 |
2 |
if (slen > 0 && xf->param_str) { |
|
|
2 |
0 |
if (slen > 0 && xf->param_str) { |
|
986
|
1 |
1 |
STRLEN plen2 = xf->param_str_len + slen + (xf->param_str2 ? xf->param_str2_len : 0); |
|
987
|
2 |
0 |
OUT_ENSURE(plen2); |
|
|
0 |
2 |
OUT_ENSURE(plen2); |
|
|
0 |
0 |
OUT_ENSURE(plen2); |
|
|
0 |
0 |
OUT_ENSURE(plen2); |
|
|
0 |
0 |
OUT_ENSURE(plen2); |
|
|
0 |
0 |
OUT_ENSURE(plen2); |
|
|
0 |
0 |
OUT_ENSURE(plen2); |
|
988
|
2 |
0 |
memcpy(OUT_PTR, xf->param_str, xf->param_str_len); |
|
990
|
2 |
0 |
memcpy(OUT_PTR + wpos, src, slen); wpos += slen; |
|
991
|
1 |
1 |
if (xf->param_str2) { memcpy(OUT_PTR + wpos, xf->param_str2, xf->param_str2_len); wpos += xf->param_str2_len; } |
|
|
1 |
0 |
if (xf->param_str2) { memcpy(OUT_PTR + wpos, xf->param_str2, xf->param_str2_len); wpos += xf->param_str2_len; } |
|
992
|
2 |
0 |
if (to_output) pos += wpos; else tmp_len = wpos; |
|
994
|
0 |
2 |
if (!to_output) tmp_len = 0; |
|
1000
|
4 |
0 |
{ char tb[64]; int tl = slen < 63 ? (int)slen : 63; memcpy(tb, src, tl); tb[tl] = 0; v = atof(tb); } |
|
1001
|
4 |
0 |
OUT_ENSURE(32); |
|
|
0 |
4 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
1003
|
4 |
0 |
if (v >= 1e15 || v <= -1e15) w = snprintf(OUT_PTR, 32, "%.1fP", v / 1e15); |
|
|
0 |
4 |
if (v >= 1e15 || v <= -1e15) w = snprintf(OUT_PTR, 32, "%.1fP", v / 1e15); |
|
|
0 |
0 |
if (v >= 1e15 || v <= -1e15) w = snprintf(OUT_PTR, 32, "%.1fP", v / 1e15); |
|
1004
|
4 |
0 |
else if (v >= 1e12 || v <= -1e12) w = snprintf(OUT_PTR, 32, "%.1fT", v / 1e12); |
|
|
0 |
4 |
else if (v >= 1e12 || v <= -1e12) w = snprintf(OUT_PTR, 32, "%.1fT", v / 1e12); |
|
|
0 |
0 |
else if (v >= 1e12 || v <= -1e12) w = snprintf(OUT_PTR, 32, "%.1fT", v / 1e12); |
|
1005
|
4 |
0 |
else if (v >= 1e9 || v <= -1e9) w = snprintf(OUT_PTR, 32, "%.1fG", v / 1e9); |
|
|
0 |
4 |
else if (v >= 1e9 || v <= -1e9) w = snprintf(OUT_PTR, 32, "%.1fG", v / 1e9); |
|
|
0 |
0 |
else if (v >= 1e9 || v <= -1e9) w = snprintf(OUT_PTR, 32, "%.1fG", v / 1e9); |
|
1006
|
3 |
1 |
else if (v >= 1e6 || v <= -1e6) w = snprintf(OUT_PTR, 32, "%.1fM", v / 1e6); |
|
|
0 |
3 |
else if (v >= 1e6 || v <= -1e6) w = snprintf(OUT_PTR, 32, "%.1fM", v / 1e6); |
|
|
1 |
0 |
else if (v >= 1e6 || v <= -1e6) w = snprintf(OUT_PTR, 32, "%.1fM", v / 1e6); |
|
1007
|
2 |
1 |
else if (v >= 1e3 || v <= -1e3) w = snprintf(OUT_PTR, 32, "%.1fK", v / 1e3); |
|
|
1 |
1 |
else if (v >= 1e3 || v <= -1e3) w = snprintf(OUT_PTR, 32, "%.1fK", v / 1e3); |
|
|
2 |
0 |
else if (v >= 1e3 || v <= -1e3) w = snprintf(OUT_PTR, 32, "%.1fK", v / 1e3); |
|
1008
|
1 |
0 |
else w = snprintf(OUT_PTR, 32, "%.0f", v); |
|
1009
|
0 |
4 |
if (w > 31) w = 31; |
|
1010
|
4 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
1015
|
4 |
0 |
{ char tb[64]; int tl = slen < 63 ? (int)slen : 63; memcpy(tb, src, tl); tb[tl] = 0; v = atof(tb); } |
|
1016
|
4 |
0 |
OUT_ENSURE(32); |
|
|
0 |
4 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
1018
|
1 |
3 |
if (v >= 1099511627776.0) w = snprintf(OUT_PTR, 32, "%.1f TB", v / 1099511627776.0); |
|
|
1 |
0 |
if (v >= 1099511627776.0) w = snprintf(OUT_PTR, 32, "%.1f TB", v / 1099511627776.0); |
|
1019
|
1 |
2 |
else if (v >= 1073741824.0) w = snprintf(OUT_PTR, 32, "%.1f GB", v / 1073741824.0); |
|
|
1 |
0 |
else if (v >= 1073741824.0) w = snprintf(OUT_PTR, 32, "%.1f GB", v / 1073741824.0); |
|
1020
|
0 |
2 |
else if (v >= 1048576.0) w = snprintf(OUT_PTR, 32, "%.1f MB", v / 1048576.0); |
|
|
0 |
0 |
else if (v >= 1048576.0) w = snprintf(OUT_PTR, 32, "%.1f MB", v / 1048576.0); |
|
1021
|
1 |
1 |
else if (v >= 1024.0) w = snprintf(OUT_PTR, 32, "%.1f KB", v / 1024.0); |
|
|
1 |
0 |
else if (v >= 1024.0) w = snprintf(OUT_PTR, 32, "%.1f KB", v / 1024.0); |
|
1022
|
1 |
0 |
else w = snprintf(OUT_PTR, 32, "%.0f B", v); |
|
1023
|
0 |
4 |
if (w > 31) w = 31; |
|
1024
|
4 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
1029
|
17 |
5 |
for (STRLEN i = 0; i < slen; i++) |
|
1030
|
17 |
0 |
if (src[i] >= '0' && src[i] <= '9') v = v * 10 + (src[i] - '0'); |
|
|
17 |
0 |
if (src[i] >= '0' && src[i] <= '9') v = v * 10 + (src[i] - '0'); |
|
1031
|
5 |
0 |
OUT_ENSURE(64); |
|
|
0 |
5 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
|
0 |
0 |
OUT_ENSURE(64); |
|
1033
|
2 |
3 |
if (v >= 86400 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldd ", v / 86400); if (n > 0) w += n; v %= 86400; } |
|
|
2 |
0 |
if (v >= 86400 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldd ", v / 86400); if (n > 0) w += n; v %= 86400; } |
|
|
2 |
0 |
if (v >= 86400 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldd ", v / 86400); if (n > 0) w += n; v %= 86400; } |
|
|
2 |
0 |
if (v >= 86400 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldd ", v / 86400); if (n > 0) w += n; v %= 86400; } |
|
1034
|
3 |
2 |
if (v >= 3600 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldh ", v / 3600); if (n > 0) w += n; v %= 3600; } |
|
|
3 |
0 |
if (v >= 3600 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldh ", v / 3600); if (n > 0) w += n; v %= 3600; } |
|
|
3 |
0 |
if (v >= 3600 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldh ", v / 3600); if (n > 0) w += n; v %= 3600; } |
|
|
3 |
0 |
if (v >= 3600 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldh ", v / 3600); if (n > 0) w += n; v %= 3600; } |
|
1035
|
3 |
2 |
if (v >= 60 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldm ", v / 60); if (n > 0) w += n; v %= 60; } |
|
|
3 |
0 |
if (v >= 60 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldm ", v / 60); if (n > 0) w += n; v %= 60; } |
|
|
3 |
0 |
if (v >= 60 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldm ", v / 60); if (n > 0) w += n; v %= 60; } |
|
|
3 |
0 |
if (v >= 60 && w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%ldm ", v / 60); if (n > 0) w += n; v %= 60; } |
|
1036
|
5 |
0 |
if (w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%lds", v); if (n > 0) w += n; } |
|
|
5 |
0 |
if (w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%lds", v); if (n > 0) w += n; } |
|
|
5 |
0 |
if (w < 63) { int n = snprintf(OUT_PTR + w, 64 - w, "%lds", v); if (n > 0) w += n; } |
|
1037
|
0 |
5 |
if (w > 63) w = 63; |
|
1038
|
5 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
1044
|
30 |
3 |
for (STRLEN i = 0; i < slen; i++) |
|
1045
|
30 |
0 |
if (src[i] >= '0' && src[i] <= '9') epoch = epoch * 10 + (src[i] - '0'); |
|
|
30 |
0 |
if (src[i] >= '0' && src[i] <= '9') epoch = epoch * 10 + (src[i] - '0'); |
|
1047
|
3 |
0 |
OUT_ENSURE(32); |
|
|
0 |
3 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
|
0 |
0 |
OUT_ENSURE(32); |
|
1049
|
1 |
2 |
if (diff < 0) w = snprintf(OUT_PTR, 32, "in the future"); |
|
|
1 |
0 |
if (diff < 0) w = snprintf(OUT_PTR, 32, "in the future"); |
|
1050
|
0 |
2 |
else if (diff < 60) w = snprintf(OUT_PTR, 32, "%lds ago", diff); |
|
|
0 |
0 |
else if (diff < 60) w = snprintf(OUT_PTR, 32, "%lds ago", diff); |
|
1051
|
1 |
1 |
else if (diff < 3600) w = snprintf(OUT_PTR, 32, "%ldm ago", diff / 60); |
|
|
1 |
0 |
else if (diff < 3600) w = snprintf(OUT_PTR, 32, "%ldm ago", diff / 60); |
|
1052
|
1 |
0 |
else if (diff < 86400) w = snprintf(OUT_PTR, 32, "%ldh ago", diff / 3600); |
|
|
1 |
0 |
else if (diff < 86400) w = snprintf(OUT_PTR, 32, "%ldh ago", diff / 3600); |
|
1053
|
0 |
0 |
else if (diff < 2592000) w = snprintf(OUT_PTR, 32, "%ldd ago", diff / 86400); |
|
|
0 |
0 |
else if (diff < 2592000) w = snprintf(OUT_PTR, 32, "%ldd ago", diff / 86400); |
|
1054
|
0 |
0 |
else if (diff < 31536000) w = snprintf(OUT_PTR, 32, "%ldmo ago", diff / 2592000); |
|
|
0 |
0 |
else if (diff < 31536000) w = snprintf(OUT_PTR, 32, "%ldmo ago", diff / 2592000); |
|
1055
|
0 |
0 |
else w = snprintf(OUT_PTR, 32, "%ldy ago", diff / 31536000); |
|
1056
|
0 |
3 |
if (w > 31) w = 31; |
|
1057
|
3 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
1062
|
5 |
1 |
OUT_ENSURE(slen); |
|
|
0 |
5 |
OUT_ENSURE(slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); |
|
|
1 |
0 |
OUT_ENSURE(slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); |
|
1064
|
5 |
1 |
if (mask_len > 0) memset(OUT_PTR, '*', mask_len); |
|
|
4 |
1 |
if (mask_len > 0) memset(OUT_PTR, '*', mask_len); |
|
1065
|
5 |
1 |
if (keep > 0) { |
|
1068
|
4 |
1 |
memcpy(OUT_PTR + start, src + slen - copy, copy); |
|
1071
|
5 |
1 |
if (to_output) pos += total; else tmp_len = total; |
|
1075
|
3 |
0 |
OUT_ENSURE(20); |
|
|
0 |
3 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
|
0 |
0 |
OUT_ENSURE(20); |
|
1076
|
3 |
0 |
int w = itoa_fast(OUT_PTR, (long)slen); |
|
1077
|
3 |
0 |
if (to_output) pos += w; else tmp_len = w; |
|
1084
|
348 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
1 |
347 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
1 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
0 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
|
348 |
0 |
OUT_ENSURE(slen); memcpy(OUT_PTR, src, slen); |
|
1085
|
348 |
0 |
if (to_output) pos += slen; else tmp_len = slen; |
|
1103
|
1010 |
10561 |
if (op->is_rownum) { |
|
1110
|
10561 |
1010 |
if (!op->is_rownum) { |
|
1114
|
10561 |
0 |
if (!sv || !SvOK(sv)) { |
|
|
27 |
10534 |
if (!sv || !SvOK(sv)) { |
|
1115
|
27 |
19 |
for (int i = 0; i < op->chain_len; i++) { |
|
1116
|
4 |
23 |
if (op->chain[i].type == XF_DEFAULT && op->chain[i].param_str) { |
|
|
4 |
0 |
if (op->chain[i].type == XF_DEFAULT && op->chain[i].param_str) { |
|
1122
|
1 |
22 |
if (op->chain[i].type == XF_COALESCE) { |
|
1126
|
21 |
1 |
if (op->chain[i].type == XF_BOOL || op->chain[i].type == XF_IF || |
|
|
20 |
1 |
if (op->chain[i].type == XF_BOOL || op->chain[i].type == XF_IF || |
|
1127
|
20 |
0 |
op->chain[i].type == XF_UNLESS || op->chain[i].type == XF_MAP || |
|
|
20 |
0 |
op->chain[i].type == XF_UNLESS || op->chain[i].type == XF_MAP || |
|
1128
|
1 |
19 |
op->chain[i].type == XF_WRAP) { |
|
1134
|
19 |
8 |
if (!use_default) return; |
|
1139
|
10542 |
1010 |
if (!op->is_rownum && op->chain_len > 0 && op->chain[0].type == XF_COALESCE) { |
|
|
10542 |
0 |
if (!op->is_rownum && op->chain_len > 0 && op->chain[0].type == XF_COALESCE) { |
|
|
6 |
10536 |
if (!op->is_rownum && op->chain_len > 0 && op->chain[0].type == XF_COALESCE) { |
|
1141
|
6 |
0 |
if (sv && SvOK(sv)) { |
|
|
5 |
1 |
if (sv && SvOK(sv)) { |
|
1144
|
1 |
4 |
if (plen > 0) { primary_ok = 1; src = pstr; slen = plen; use_default = 0; } |
|
1146
|
5 |
1 |
if (!primary_ok && !op->chain[0].param_str) return; |
|
|
0 |
5 |
if (!primary_ok && !op->chain[0].param_str) return; |
|
1147
|
5 |
1 |
if (!primary_ok && op->chain[0].param_str) { |
|
|
5 |
0 |
if (!primary_ok && op->chain[0].param_str) { |
|
1154
|
10 |
0 |
while (tp < pe) { |
|
1156
|
5 |
5 |
if (!next) { last_param = tp; last_param_len = pe - tp; break; } |
|
1163
|
7 |
0 |
while (p < pe) { |
|
1165
|
5 |
2 |
STRLEN seg_len = next ? (STRLEN)(next - p) : (STRLEN)(pe - p); |
|
1166
|
2 |
5 |
if (!next && p == last_param) break; /* this is the literal default */ |
|
|
2 |
0 |
if (!next && p == last_param) break; /* this is the literal default */ |
|
1168
|
0 |
5 |
if (p != last_param || next) { |
|
|
0 |
0 |
if (p != last_param || next) { |
|
1171
|
4 |
1 |
if (mode == ROW_HASH) { |
|
1175
|
1 |
0 |
if (seg_len > 0 && p[0] == '-') { is_neg = 1; si = 1; } |
|
|
0 |
1 |
if (seg_len > 0 && p[0] == '-') { is_neg = 1; si = 1; } |
|
1177
|
1 |
1 |
for (STRLEN fi = si; fi < seg_len; fi++) |
|
1178
|
1 |
0 |
if (p[fi] < '0' || p[fi] > '9') { is_num = 0; break; } |
|
|
0 |
1 |
if (p[fi] < '0' || p[fi] > '9') { is_num = 0; break; } |
|
1179
|
1 |
0 |
if (is_num && seg_len > (STRLEN)si) { |
|
|
1 |
0 |
if (is_num && seg_len > (STRLEN)si) { |
|
1181
|
1 |
1 |
for (STRLEN fi = si; fi < seg_len; fi++) tmp_op.col = tmp_op.col * 10 + (p[fi] - '0'); |
|
1182
|
0 |
1 |
if (is_neg) tmp_op.col = -tmp_op.col; |
|
1184
|
0 |
0 |
if (!next) break; /* non-numeric in array mode = treat as literal default */ |
|
1189
|
5 |
0 |
if (fallback && SvOK(fallback)) { |
|
|
4 |
1 |
if (fallback && SvOK(fallback)) { |
|
1192
|
3 |
1 |
if (flen > 0) { sv = fallback; src = fstr; slen = flen; use_default = 0; found = 1; break; } |
|
1195
|
0 |
2 |
if (!next) break; |
|
1198
|
2 |
3 |
if (!found) { |
|
1206
|
10533 |
1019 |
if (!use_default && !op->is_rownum && op->chain_len > 0 && op->chain[0].type == XF_COUNT) { |
|
|
10533 |
0 |
if (!use_default && !op->is_rownum && op->chain_len > 0 && op->chain[0].type == XF_COUNT) { |
|
|
10533 |
0 |
if (!use_default && !op->is_rownum && op->chain_len > 0 && op->chain[0].type == XF_COUNT) { |
|
|
3 |
10530 |
if (!use_default && !op->is_rownum && op->chain_len > 0 && op->chain[0].type == XF_COUNT) { |
|
1208
|
3 |
0 |
if (sv && SvROK(sv)) { |
|
|
2 |
1 |
if (sv && SvROK(sv)) { |
|
1210
|
1 |
1 |
if (SvTYPE(inner) == SVt_PVAV) cnt = (int)av_count((AV *)inner); |
|
1211
|
1 |
0 |
else if (SvTYPE(inner) == SVt_PVHV) cnt = (int)HvUSEDKEYS((HV *)inner); |
|
|
0 |
1 |
else if (SvTYPE(inner) == SVt_PVHV) cnt = (int)HvUSEDKEYS((HV *)inner); |
|
1215
|
3 |
0 |
if (op->chain_len == 1) { |
|
1217
|
0 |
3 |
BUF_ENSURE(clen); memcpy(buf + pos, cbuf, clen); pos += clen; |
|
|
0 |
0 |
BUF_ENSURE(clen); memcpy(buf + pos, cbuf, clen); pos += clen; |
|
1225
|
10530 |
1019 |
if (!use_default && !op->is_rownum && !(op->chain_len > 0 && |
|
|
10530 |
0 |
if (!use_default && !op->is_rownum && !(op->chain_len > 0 && |
|
|
10530 |
0 |
if (!use_default && !op->is_rownum && !(op->chain_len > 0 && |
|
1226
|
10530 |
0 |
(op->chain[0].type == XF_COUNT || op->chain[0].type == XF_COALESCE))) { |
|
|
10526 |
4 |
(op->chain[0].type == XF_COUNT || op->chain[0].type == XF_COALESCE))) { |
|
1228
|
10526 |
0 |
if (op->chain_len > 0 && (op->chain[0].type == XF_INT || op->chain[0].type == XF_INT_COMMA)) { |
|
|
473 |
10053 |
if (op->chain_len > 0 && (op->chain[0].type == XF_INT || op->chain[0].type == XF_INT_COMMA)) { |
|
|
5 |
468 |
if (op->chain_len > 0 && (op->chain[0].type == XF_INT || op->chain[0].type == XF_INT_COMMA)) { |
|
1230
|
10053 |
5 |
int ilen = (op->chain[0].type == XF_INT) ? itoa_fast(ibuf, SvIV_nomg(sv)) : itoa_comma(ibuf, SvIV_nomg(sv)); |
|
1231
|
10058 |
0 |
if (op->chain_len == 1) { |
|
1233
|
0 |
10058 |
BUF_ENSURE(ilen); memcpy(buf + pos, ibuf, ilen); pos += ilen; |
|
|
0 |
0 |
BUF_ENSURE(ilen); memcpy(buf + pos, ibuf, ilen); pos += ilen; |
|
1238
|
468 |
0 |
} else if (op->chain_len > 0 && op->chain[0].type == XF_FLOAT) { |
|
|
3 |
465 |
} else if (op->chain_len > 0 && op->chain[0].type == XF_FLOAT) { |
|
1241
|
0 |
3 |
if (flen > 63) flen = 63; |
|
1242
|
3 |
0 |
if (op->chain_len == 1) { |
|
1244
|
0 |
3 |
BUF_ENSURE(flen); memcpy(buf + pos, fbuf, flen); pos += flen; |
|
|
0 |
0 |
BUF_ENSURE(flen); memcpy(buf + pos, fbuf, flen); pos += flen; |
|
1256
|
469 |
1019 |
if (!use_default && !op->is_rownum && op->chain_len > 0 && |
|
|
469 |
0 |
if (!use_default && !op->is_rownum && op->chain_len > 0 && |
|
|
469 |
0 |
if (!use_default && !op->is_rownum && op->chain_len > 0 && |
|
1257
|
469 |
0 |
(op->chain[0].type == XF_INT || op->chain[0].type == XF_INT_COMMA || |
|
|
469 |
0 |
(op->chain[0].type == XF_INT || op->chain[0].type == XF_INT_COMMA || |
|
1258
|
469 |
0 |
op->chain[0].type == XF_FLOAT || op->chain[0].type == XF_COUNT || |
|
|
469 |
0 |
op->chain[0].type == XF_FLOAT || op->chain[0].type == XF_COUNT || |
|
1259
|
4 |
465 |
op->chain[0].type == XF_COALESCE)) |
|
1262
|
4 |
1484 |
if (op->chain_len - start == 0) { |
|
1264
|
0 |
4 |
BUF_ENSURE(slen); memcpy(buf + pos, src, slen); pos += slen; |
|
|
0 |
0 |
BUF_ENSURE(slen); memcpy(buf + pos, src, slen); pos += slen; |
|
1269
|
1475 |
9 |
if (op->chain_len - start == 1) { |
|
1271
|
3 |
1472 |
if (xf->type == XF_DEFAULT) { |
|
1273
|
0 |
3 |
BUF_ENSURE(slen); memcpy(buf + pos, src, slen); pos += slen; |
|
|
0 |
0 |
BUF_ENSURE(slen); memcpy(buf + pos, src, slen); pos += slen; |
|
1278
|
0 |
1472 |
if (tmp) free(tmp); |
|
1289
|
25 |
9 |
for (int i = start; i < op->chain_len; i++) { |
|
1290
|
2 |
23 |
if (op->chain[i].type == XF_DEFAULT) continue; |
|
1292
|
14 |
9 |
for (int k = i + 1; k < op->chain_len; k++) |
|
1293
|
14 |
0 |
if (op->chain[k].type != XF_DEFAULT) { is_last = 0; break; } |
|
1295
|
9 |
14 |
if (is_last) { |
|
1298
|
0 |
9 |
if (dummy) free(dummy); |
|
1300
|
10 |
4 |
if (use_a) { |
|
1313
|
8 |
1 |
if (tmp_a) free(tmp_a); |
|
1314
|
2 |
7 |
if (tmp_b) free(tmp_b); |
|
1320
|
18 |
13 |
if (is_skip_if) { col = t->skip_if_col; key = t->skip_if_key; key_len = t->skip_if_key_len; } |
|
1324
|
6 |
25 |
if (key) { |
|
1325
|
6 |
0 |
if (SvROK(row_sv) && SvTYPE(SvRV(row_sv)) == SVt_PVHV) { |
|
|
6 |
0 |
if (SvROK(row_sv) && SvTYPE(SvRV(row_sv)) == SVt_PVHV) { |
|
1327
|
6 |
0 |
if (sv) field = *sv; |
|
1330
|
25 |
0 |
if (SvROK(row_sv) && SvTYPE(SvRV(row_sv)) == SVt_PVAV) { |
|
|
25 |
0 |
if (SvROK(row_sv) && SvTYPE(SvRV(row_sv)) == SVt_PVAV) { |
|
1333
|
0 |
25 |
SSize_t top = av_top_index(av); |
|
1334
|
6 |
19 |
if (col < 0) col = (int)(top + 1) + col; |
|
1335
|
25 |
0 |
if (col >= 0 && col <= (int)top) field = ary[col]; |
|
|
25 |
0 |
if (col >= 0 && col <= (int)top) field = ary[col]; |
|
1338
|
31 |
0 |
if (!field || !SvOK(field)) return 0; |
|
|
2 |
29 |
if (!field || !SvOK(field)) return 0; |
|
1341
|
11 |
18 |
if (flen == 0) return 0; |
|
1342
|
15 |
3 |
if (flen == 1 && fstr[0] == '0') return 0; |
|
|
5 |
10 |
if (flen == 1 && fstr[0] == '0') return 0; |
|
1347
|
18 |
11525 |
if (t->has_skip_if && is_field_truthy(aTHX_ row_sv, t, 1)) return 1; |
|
|
7 |
11 |
if (t->has_skip_if && is_field_truthy(aTHX_ row_sv, t, 1)) return 1; |
|
1348
|
13 |
11523 |
if (t->has_skip_unless && !is_field_truthy(aTHX_ row_sv, t, 0)) return 1; |
|
|
7 |
6 |
if (t->has_skip_unless && !is_field_truthy(aTHX_ row_sv, t, 0)) return 1; |
|
1357
|
10 |
175 |
RBUF_INIT(t, t->header_len + t->footer_len + nrows * 300 + 1); |
|
|
10 |
0 |
RBUF_INIT(t, t->header_len + t->footer_len + nrows * 300 + 1); |
|
|
0 |
175 |
RBUF_INIT(t, t->header_len + t->footer_len + nrows * 300 + 1); |
|
1359
|
0 |
185 |
BUF_WRITE(t->header, t->header_len); |
|
|
0 |
0 |
BUF_WRITE(t->header, t->header_len); |
|
1361
|
11221 |
185 |
for (SSize_t i = 0; i < nrows; i++) { |
|
1363
|
0 |
11221 |
if (!rowref) continue; |
|
1364
|
10 |
11211 |
if (should_skip_row(aTHX_ *rowref, t)) continue; |
|
1365
|
11029 |
182 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
11012 |
17 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
0 |
11012 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
0 |
0 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
1367
|
11321 |
11211 |
for (int j = 0; j < t->nops; j++) { |
|
1369
|
87 |
11234 |
if (op->static_data) |
|
1370
|
0 |
87 |
BUF_WRITE(op->static_data, op->static_len); |
|
|
0 |
0 |
BUF_WRITE(op->static_data, op->static_len); |
|
1375
|
0 |
185 |
BUF_WRITE(t->footer, t->footer_len); |
|
|
0 |
0 |
BUF_WRITE(t->footer, t->footer_len); |
|
1388
|
39 |
0 |
for (int k = 0; k < sort_nsort; k++) { |
|
1389
|
5 |
34 |
if (sort_numeric) { |
|
1391
|
5 |
0 |
int la = ea->key_lens[k] < 63 ? (int)ea->key_lens[k] : 63; |
|
1392
|
5 |
0 |
int lb = eb->key_lens[k] < 63 ? (int)eb->key_lens[k] : 63; |
|
1396
|
2 |
3 |
if (da < db) return -1; |
|
1397
|
3 |
0 |
if (da > db) return 1; |
|
1401
|
32 |
2 |
if (r) return r; |
|
1402
|
0 |
2 |
if (ea->key_lens[k] != eb->key_lens[k]) |
|
1403
|
0 |
0 |
return ea->key_lens[k] < eb->key_lens[k] ? -1 : 1; |
|
1427
|
13 |
1 |
sort_entry *entries = nrows > 0 ? (sort_entry *)malloc(nrows * sizeof(sort_entry)) : NULL; |
|
1428
|
13 |
1 |
if (nrows > 0 && !entries) croak("malloc"); |
|
|
0 |
13 |
if (nrows > 0 && !entries) croak("malloc"); |
|
1429
|
13 |
1 |
const char **all_keys = nrows > 0 ? (const char **)calloc(nrows * nsort, sizeof(char *)) : NULL; |
|
1430
|
13 |
1 |
STRLEN *all_lens = nrows > 0 ? (STRLEN *)calloc(nrows * nsort, sizeof(STRLEN)) : NULL; |
|
1435
|
13 |
1 |
if (entries) SAVEDESTRUCTOR_X(ts_free, entries); |
|
1436
|
13 |
1 |
if (all_keys) SAVEDESTRUCTOR_X(ts_free, all_keys); |
|
1437
|
13 |
1 |
if (all_lens) SAVEDESTRUCTOR_X(ts_free, all_lens); |
|
1440
|
13 |
1 |
if (nrows > 0 && (!all_keys || !all_lens)) croak("calloc"); |
|
|
13 |
0 |
if (nrows > 0 && (!all_keys || !all_lens)) croak("calloc"); |
|
|
0 |
13 |
if (nrows > 0 && (!all_keys || !all_lens)) croak("calloc"); |
|
1441
|
39 |
14 |
for (SSize_t i = 0; i < nrows; i++) { |
|
1443
|
39 |
0 |
entries[i].sv = rowref ? *rowref : &PL_sv_undef; |
|
1446
|
45 |
39 |
for (int k = 0; k < nsort; k++) { |
|
1448
|
45 |
0 |
if (rowref && SvROK(*rowref)) { |
|
|
45 |
0 |
if (rowref && SvROK(*rowref)) { |
|
1450
|
21 |
24 |
if (sort_keys) { |
|
1451
|
21 |
0 |
if (SvTYPE(SvRV(*rowref)) == SVt_PVHV) { |
|
1453
|
21 |
0 |
if (sv) field = *sv; |
|
1456
|
24 |
0 |
if (SvTYPE(SvRV(*rowref)) == SVt_PVAV) { |
|
1458
|
24 |
0 |
if (sv) field = *sv; |
|
1461
|
45 |
0 |
if (field) entries[i].keys[k] = SvPV(field, entries[i].key_lens[k]); |
|
1468
|
5 |
9 |
int (*cmp)(const void *, const void *) = descending ? sort_cmp_desc : sort_cmp_asc; |
|
1473
|
2 |
12 |
RBUF_INIT(t, t->header_len + t->footer_len + nrows * 300 + 1); |
|
|
2 |
0 |
RBUF_INIT(t, t->header_len + t->footer_len + nrows * 300 + 1); |
|
|
0 |
12 |
RBUF_INIT(t, t->header_len + t->footer_len + nrows * 300 + 1); |
|
1475
|
0 |
14 |
BUF_WRITE(t->header, t->header_len); |
|
|
0 |
0 |
BUF_WRITE(t->header, t->header_len); |
|
1477
|
39 |
14 |
for (SSize_t i = 0; i < nrows; i++) { |
|
1479
|
1 |
38 |
if (should_skip_row(aTHX_ row_sv, t)) continue; |
|
1480
|
25 |
13 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
21 |
4 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
0 |
21 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
0 |
0 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
1482
|
68 |
38 |
for (int j = 0; j < t->nops; j++) { |
|
1484
|
15 |
53 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
|
0 |
15 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
|
0 |
0 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
1488
|
0 |
14 |
BUF_WRITE(t->footer, t->footer_len); |
|
|
0 |
0 |
BUF_WRITE(t->footer, t->footer_len); |
|
1496
|
1 |
4 |
if (should_skip_row(aTHX_ row_sv, t)) |
|
1500
|
0 |
4 |
RBUF_INIT(t, t->header_len + t->footer_len + 512); |
|
|
0 |
0 |
RBUF_INIT(t, t->header_len + t->footer_len + 512); |
|
|
0 |
4 |
RBUF_INIT(t, t->header_len + t->footer_len + 512); |
|
1501
|
0 |
4 |
BUF_WRITE(t->header, t->header_len); |
|
|
0 |
0 |
BUF_WRITE(t->header, t->header_len); |
|
1502
|
9 |
4 |
for (int j = 0; j < t->nops; j++) { |
|
1504
|
4 |
5 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
|
0 |
4 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
|
0 |
0 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
1507
|
0 |
4 |
BUF_WRITE(t->footer, t->footer_len); |
|
|
0 |
0 |
BUF_WRITE(t->footer, t->footer_len); |
|
1517
|
0 |
2 |
if (!buf) croak("malloc"); |
|
1519
|
0 |
2 |
BUF_WRITE(t->header, t->header_len); |
|
|
0 |
0 |
BUF_WRITE(t->header, t->header_len); |
|
1521
|
203 |
2 |
for (SSize_t i = 0; i < nrows; i++) { |
|
1523
|
0 |
203 |
if (!rowref) continue; |
|
1524
|
0 |
203 |
if (should_skip_row(aTHX_ *rowref, t)) continue; |
|
1525
|
201 |
2 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
201 |
0 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
0 |
201 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
0 |
0 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
1527
|
203 |
203 |
for (int j = 0; j < t->nops; j++) { |
|
1529
|
0 |
203 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
|
0 |
0 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
|
0 |
0 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
1532
|
3 |
200 |
if (pos > 65536) { PerlIO_write(fh, buf, pos); pos = 0; } |
|
1534
|
0 |
2 |
BUF_WRITE(t->footer, t->footer_len); |
|
|
0 |
0 |
BUF_WRITE(t->footer, t->footer_len); |
|
1535
|
2 |
0 |
if (pos) PerlIO_write(fh, buf, pos); |
|
1544
|
3 |
5 |
if (use_fh) { |
|
1547
|
0 |
3 |
if (!buf) croak("malloc"); |
|
1549
|
0 |
5 |
RBUF_INIT(t, 4096); |
|
|
0 |
0 |
RBUF_INIT(t, 4096); |
|
|
0 |
5 |
RBUF_INIT(t, 4096); |
|
1553
|
0 |
8 |
BUF_WRITE(t->header, t->header_len); |
|
|
0 |
0 |
BUF_WRITE(t->header, t->header_len); |
|
1561
|
0 |
83 |
PUSHMARK(SP); |
|
1565
|
83 |
0 |
if (SvTRUE(ERRSV)) { |
|
|
2 |
81 |
if (SvTRUE(ERRSV)) { |
|
1569
|
2 |
0 |
SV *err = newSVsv(ERRSV); |
|
1570
|
2 |
0 |
PUTBACK; FREETMPS; LEAVE; |
|
1575
|
81 |
0 |
if (count > 0) row_sv = POPs; |
|
1576
|
81 |
0 |
if (!row_sv || !SvOK(row_sv) || !SvROK(row_sv)) { |
|
|
75 |
6 |
if (!row_sv || !SvOK(row_sv) || !SvROK(row_sv)) { |
|
|
0 |
75 |
if (!row_sv || !SvOK(row_sv) || !SvROK(row_sv)) { |
|
1577
|
6 |
0 |
PUTBACK; FREETMPS; LEAVE; |
|
1581
|
75 |
0 |
PUTBACK; FREETMPS; LEAVE; |
|
1583
|
73 |
2 |
if (!should_skip_row(aTHX_ row_sv, t)) { |
|
1584
|
67 |
6 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
5 |
62 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
0 |
5 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
|
0 |
0 |
if (!first && t->sep_len) BUF_WRITE(t->sep, t->sep_len); |
|
1586
|
209 |
73 |
for (int j = 0; j < t->nops; j++) { |
|
1588
|
133 |
76 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
|
3 |
130 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
|
0 |
3 |
if (op->static_data) BUF_WRITE(op->static_data, op->static_len); |
|
1591
|
5 |
68 |
if (use_fh && pos > 65536) { PerlIO_write(fh, buf, pos); pos = 0; } |
|
|
0 |
5 |
if (use_fh && pos > 65536) { PerlIO_write(fh, buf, pos); pos = 0; } |
|
1598
|
0 |
6 |
BUF_WRITE(t->footer, t->footer_len); |
|
|
0 |
0 |
BUF_WRITE(t->footer, t->footer_len); |
|
1600
|
2 |
4 |
if (use_fh) { |
|
1601
|
2 |
0 |
if (pos) PerlIO_write(fh, buf, pos); |
|
1613
|
6 |
2 |
for (int i = 0; i < t->nops; i++) { |
|
1615
|
4 |
2 |
if (op->chain && !op->is_rownum) { |
|
|
4 |
0 |
if (op->chain && !op->is_rownum) { |
|
1616
|
2 |
2 |
if (op->key) |
|
1641
|
2 |
204 |
if (items == 2 && SvPOK(ST(1))) { |
|
|
2 |
0 |
if (items == 2 && SvPOK(ST(1))) { |
|
1644
|
0 |
204 |
if (items % 2 == 0) croak("Odd number of arguments"); |
|
1645
|
270 |
204 |
for (int i = 1; i < items; i += 2) { |
|
1648
|
10 |
260 |
if (strcmp(key, "header") == 0) header = SvPV(val, hlen); |
|
1649
|
204 |
56 |
else if (strcmp(key, "row") == 0) row = SvPV(val, rlen); |
|
1650
|
10 |
46 |
else if (strcmp(key, "footer") == 0) footer = SvPV(val, flen); |
|
1651
|
30 |
16 |
else if (strcmp(key, "separator") == 0) sep = SvPV(val, slen); |
|
1652
|
5 |
11 |
else if (strcmp(key, "escape_char") == 0) { STRLEN el; const char *ev = SvPV(val, el); if (el) esc = ev[0]; } |
|
|
5 |
0 |
else if (strcmp(key, "escape_char") == 0) { STRLEN el; const char *ev = SvPV(val, el); if (el) esc = ev[0]; } |
|
1653
|
7 |
4 |
else if (strcmp(key, "skip_if") == 0) skip_if_sv = val; |
|
1654
|
4 |
0 |
else if (strcmp(key, "skip_unless") == 0) skip_unless_sv = val; |
|
1658
|
7 |
197 |
if (skip_if_sv) { |
|
1660
|
1 |
6 |
if (SvIOK(skip_if_sv) || looks_like_number(skip_if_sv)) { |
|
|
0 |
1 |
if (SvIOK(skip_if_sv) || looks_like_number(skip_if_sv)) { |
|
1671
|
4 |
200 |
if (skip_unless_sv) { |
|
1673
|
1 |
3 |
if (SvIOK(skip_unless_sv) || looks_like_number(skip_unless_sv)) { |
|
|
0 |
1 |
if (SvIOK(skip_unless_sv) || looks_like_number(skip_unless_sv)) { |
|
1713
|
5 |
9 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
|
5 |
0 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
|
5 |
0 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
1717
|
4 |
1 |
if (sv && SvTRUE(*sv)) descending = 1; |
|
|
4 |
0 |
if (sv && SvTRUE(*sv)) descending = 1; |
|
1719
|
2 |
3 |
if (sv && SvTRUE(*sv)) numeric = 1; |
|
|
2 |
0 |
if (sv && SvTRUE(*sv)) numeric = 1; |
|
1721
|
3 |
11 |
if (SvROK(sort_by) && SvTYPE(SvRV(sort_by)) == SVt_PVAV) { |
|
|
3 |
0 |
if (SvROK(sort_by) && SvTYPE(SvRV(sort_by)) == SVt_PVAV) { |
|
1724
|
0 |
3 |
if (nsort == 0) { |
|
1728
|
3 |
0 |
int use_keys = first && !SvIOK(*first) && !looks_like_number(*first); |
|
|
2 |
1 |
int use_keys = first && !SvIOK(*first) && !looks_like_number(*first); |
|
|
2 |
0 |
int use_keys = first && !SvIOK(*first) && !looks_like_number(*first); |
|
1729
|
2 |
1 |
if (use_keys) { |
|
1732
|
3 |
2 |
for (int i = 0; i < nsort; i++) { |
|
1734
|
3 |
0 |
skeys[i] = el ? SvPV(*el, sklens[i]) : ""; |
|
1735
|
0 |
3 |
if (!el) sklens[i] = 0; |
|
1741
|
2 |
1 |
for (int i = 0; i < nsort; i++) { |
|
1743
|
2 |
0 |
scols[i] = el ? (int)SvIV(*el) : 0; |
|
1749
|
4 |
7 |
} else if (SvIOK(sort_by) || looks_like_number(sort_by)) { |
|
|
0 |
4 |
} else if (SvIOK(sort_by) || looks_like_number(sort_by)) { |
|
1755
|
4 |
0 |
if (klen > 1 && key[0] == '-') { key++; klen--; descending = 1; } |
|
|
1 |
3 |
if (klen > 1 && key[0] == '-') { key++; klen--; descending = 1; } |
|
1792
|
8 |
0 |
if (!SvROK(cb) || SvTYPE(SvRV(cb)) != SVt_PVCV) |
|
|
0 |
8 |
if (!SvROK(cb) || SvTYPE(SvRV(cb)) != SVt_PVCV) |
|
1795
|
3 |
5 |
if (items > 2) { |
|
1820
|
0 |
2 |
RETVAL = (IV)t->last_row_count; |
|
1831
|
0 |
2 |
if (items % 2 == 0) croak("Odd number of arguments"); |
|
1834
|
2 |
2 |
for (int i = 1; i < items; i += 2) { |
|
1837
|
2 |
0 |
if (strcmp(key, "row") == 0) row = SvPV(val, rlen); |
|
1838
|
0 |
0 |
else if (strcmp(key, "separator") == 0) sep = SvPV(val, slen); |
|
1840
|
0 |
2 |
if (!row) croak("clone requires 'row' argument"); |
|
1841
|
2 |
0 |
tpl_compiled *t = tpl_compile(aTHX_ |
|
1846
|
2 |
0 |
orig->escape_char); |
|
1850
|
0 |
2 |
if (orig->skip_if_key) { |
|
1857
|
0 |
2 |
if (orig->skip_unless_key) { |