Lines Matching refs:t
270 static int ssi_expr_tokenizer(ssi_tokenizer_t * const t, buffer * const token) { in ssi_expr_tokenizer() argument
273 while (t->offset < t->size in ssi_expr_tokenizer()
274 && (t->input[t->offset] == ' ' || t->input[t->offset] == '\t')) { in ssi_expr_tokenizer()
275 ++t->offset; in ssi_expr_tokenizer()
277 if (t->offset >= t->size) in ssi_expr_tokenizer()
279 if (t->input[t->offset] == '\0') { in ssi_expr_tokenizer()
280 log_error(t->p->errh, __FILE__, __LINE__, in ssi_expr_tokenizer()
281 "pos: %zu foobar", t->offset+1); in ssi_expr_tokenizer()
285 switch (t->input[t->offset]) { in ssi_expr_tokenizer()
288 if (t->input[t->offset + 1] == '=') in ssi_expr_tokenizer()
289 ++t->offset; in ssi_expr_tokenizer()
291 t->offset++; in ssi_expr_tokenizer()
294 if (t->input[t->offset + 1] == '=') { in ssi_expr_tokenizer()
295 t->offset += 2; in ssi_expr_tokenizer()
299 t->offset += 1; in ssi_expr_tokenizer()
303 if (t->input[t->offset + 1] == '=') { in ssi_expr_tokenizer()
304 t->offset += 2; in ssi_expr_tokenizer()
308 t->offset += 1; in ssi_expr_tokenizer()
312 if (t->input[t->offset + 1] == '=') { in ssi_expr_tokenizer()
313 t->offset += 2; in ssi_expr_tokenizer()
317 t->offset += 1; in ssi_expr_tokenizer()
321 if (t->input[t->offset + 1] == '&') { in ssi_expr_tokenizer()
322 t->offset += 2; in ssi_expr_tokenizer()
326 log_error(t->p->errh, __FILE__, __LINE__, in ssi_expr_tokenizer()
327 "pos: %zu missing second &", t->offset+1); in ssi_expr_tokenizer()
331 if (t->input[t->offset + 1] == '|') { in ssi_expr_tokenizer()
332 t->offset += 2; in ssi_expr_tokenizer()
336 log_error(t->p->errh, __FILE__, __LINE__, in ssi_expr_tokenizer()
337 "pos: %zu missing second |", t->offset+1); in ssi_expr_tokenizer()
341 t->offset++; in ssi_expr_tokenizer()
342 t->in_brace++; in ssi_expr_tokenizer()
345 t->offset++; in ssi_expr_tokenizer()
346 t->in_brace--; in ssi_expr_tokenizer()
351 while (t->input[t->offset + i] && t->input[t->offset + i] != '\'') in ssi_expr_tokenizer()
353 if (t->input[t->offset + i]) { in ssi_expr_tokenizer()
354 ssi_eval_expr_append_val(token, t->input + t->offset + 1, i-1); in ssi_expr_tokenizer()
355 t->offset += i + 1; in ssi_expr_tokenizer()
359 log_error(t->p->errh, __FILE__, __LINE__, in ssi_expr_tokenizer()
360 "pos: %zu missing closing quote", t->offset+1); in ssi_expr_tokenizer()
366 if (t->input[t->offset + 1] == '{') { in ssi_expr_tokenizer()
368 while (t->input[t->offset + i] && t->input[t->offset + i] != '}') in ssi_expr_tokenizer()
370 if (t->input[t->offset + i] != '}') { in ssi_expr_tokenizer()
371 log_error(t->p->errh, __FILE__, __LINE__, in ssi_expr_tokenizer()
372 "pos: %zu missing closing curly-brace", t->offset+1); in ssi_expr_tokenizer()
376 var = t->input + t->offset + 2; in ssi_expr_tokenizer()
380 for (i = 1; light_isalpha(t->input[t->offset + i]) || in ssi_expr_tokenizer()
381 t->input[t->offset + i] == '_' || in ssi_expr_tokenizer()
382 ((i > 1) && light_isdigit(t->input[t->offset + i])); ++i) ; in ssi_expr_tokenizer()
383 var = t->input + t->offset + 1; in ssi_expr_tokenizer()
389 array_get_element_klen(t->p->ssi_cgi_env, var, varlen)) in ssi_expr_tokenizer()
391 array_get_element_klen(t->p->ssi_vars, var, varlen))) in ssi_expr_tokenizer()
393 t->offset += i; in ssi_expr_tokenizer()
397 for (i = 0; isgraph(((unsigned char *)t->input)[t->offset + i]); ++i) { in ssi_expr_tokenizer()
398 char d = t->input[t->offset + i]; in ssi_expr_tokenizer()
416 ssi_eval_expr_append_val(token, t->input + t->offset, i); in ssi_expr_tokenizer()
417 t->offset += i; in ssi_expr_tokenizer()
422 static int ssi_eval_expr_loop(ssi_tokenizer_t * const t, ssi_val_t * const v);
424 static int ssi_eval_expr_step(ssi_tokenizer_t * const t, ssi_val_t * const v) { in ssi_eval_expr_step() argument
428 const int level = t->in_brace; in ssi_eval_expr_step()
429 switch ((next = ssi_expr_tokenizer(t, &v->str))) { in ssi_eval_expr_step()
431 do { next = ssi_expr_tokenizer(t, &v->str); } while (next == TK_VALUE); in ssi_eval_expr_step()
434 if (t->in_brace > 16) return -1; /*(arbitrary limit)*/ in ssi_eval_expr_step()
435 next = ssi_eval_expr_loop(t, v); in ssi_eval_expr_step()
436 if (next == TK_RPARAN && level == t->in_brace) { in ssi_eval_expr_step()
438 next = ssi_eval_expr_step(t, v); /*(resets v)*/ in ssi_eval_expr_step()
448 return t->in_brace >= 0 ? TK_RPARAN : -1; in ssi_eval_expr_step()
450 if (++t->depth > 16) return -1; /*(arbitrary limit)*/ in ssi_eval_expr_step()
451 next = ssi_eval_expr_step(t, v); in ssi_eval_expr_step()
452 --t->depth; in ssi_eval_expr_step()
462 static int ssi_eval_expr_loop_cmp(ssi_tokenizer_t * const t, ssi_val_t * const v1, int cond) { in ssi_eval_expr_loop_cmp() argument
464 int next = ssi_eval_expr_step(t, &v2); in ssi_eval_expr_loop_cmp()
473 static int ssi_eval_expr_loop(ssi_tokenizer_t * const t, ssi_val_t * const v1) { in ssi_eval_expr_loop() argument
474 int next = ssi_eval_expr_step(t, v1); in ssi_eval_expr_loop()
481 next = ssi_eval_expr_loop_cmp(t, v1, next); in ssi_eval_expr_loop()
484 log_error(t->p->errh, __FILE__, __LINE__, in ssi_eval_expr_loop()
485 "pos: %zu parser failed somehow near here", t->offset+1); in ssi_eval_expr_loop()
497 next = ssi_eval_expr_step(t, &v2); in ssi_eval_expr_loop()
504 next = ssi_eval_expr_loop_cmp(t, &v2, next); in ssi_eval_expr_loop()
520 ssi_tokenizer_t t; in ssi_eval_expr() local
521 t.input = expr; in ssi_eval_expr()
522 t.offset = 0; in ssi_eval_expr()
523 t.size = strlen(expr); in ssi_eval_expr()
524 t.in_brace = 0; in ssi_eval_expr()
525 t.depth = 0; in ssi_eval_expr()
526 t.p = p; in ssi_eval_expr()
529 int rc = ssi_eval_expr_loop(&t, &v); in ssi_eval_expr()
530 rc = (0 == rc && 0 == t.in_brace && 0 == t.depth) in ssi_eval_expr()
571 static void mod_ssi_timefmt (buffer * const b, buffer *timefmtb, unix_time64_t t, int localtm) { in mod_ssi_timefmt() argument
577 ? localtime64_r(&t, &tm) in mod_ssi_timefmt()
578 : gmtime64_r(&t, &tm)); in mod_ssi_timefmt()