Convert printf_* in c2.c

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
Yuxuan Shui 2018-12-20 17:16:20 +00:00
parent 832601354a
commit 9b5db1f0aa
No known key found for this signature in database
GPG Key ID: 37C999F617EA1A47
1 changed files with 47 additions and 59 deletions

102
src/c2.c
View File

@ -338,18 +338,8 @@ c2h_dump_str_tgt(const c2_l_t *pleaf);
static const char *
c2h_dump_str_type(const c2_l_t *pleaf);
static void
c2_dump_raw(c2_ptr_t p);
/**
* Wrapper of c2_dump_raw().
*/
static inline void attr_unused
c2_dump(c2_ptr_t p) {
c2_dump_raw(p);
printf("\n");
fflush(stdout);
}
static void attr_unused
c2_dump(c2_ptr_t p);
static Atom
c2_get_atom_type(const c2_l_t *pleaf);
@ -393,7 +383,7 @@ c2_parse(session_t *ps, c2_lptr_t **pcondlst, const char *pattern,
}
#ifdef DEBUG_C2
printf_dbgf("(\"%s\"): ", pattern);
log_trace("(\"%s\"): ", pattern);
c2_dump(plptr->ptr);
#endif
@ -401,13 +391,12 @@ c2_parse(session_t *ps, c2_lptr_t **pcondlst, const char *pattern,
}
}
#undef c2_error
#define c2_error(format, ...) do { \
printf_err("Pattern \"%s\" pos %d: " format, pattern, offset, \
## __VA_ARGS__); \
return -1; \
log_error("Pattern \"%s\" pos %d: " format, pattern, offset, ##__VA_ARGS__); \
goto fail; \
} while(0)
// TODO Not a very good macro
#define C2H_SKIP_SPACES() { while (isspace(pattern[offset])) ++offset; }
/**
@ -427,13 +416,6 @@ c2_parse_grp(session_t *ps, const char *pattern, int offset, c2_ptr_t *presult,
// Expected end character
const char endchar = (offset ? ')': '\0');
#undef c2_error
#define c2_error(format, ...) do { \
printf_err("Pattern \"%s\" pos %d: " format, pattern, offset, \
## __VA_ARGS__); \
goto c2_parse_grp_fail; \
} while(0)
// We use a system that a maximum of 2 elements are kept. When we find
// the third element, we combine the elements according to operator
// precedence. This design limits operators to have at most two-levels
@ -524,23 +506,23 @@ c2_parse_grp(session_t *ps, const char *pattern, int offset, c2_ptr_t *presult,
// It's a subgroup if it starts with '('
if ('(' == pattern[offset]) {
if ((offset = c2_parse_grp(ps, pattern, offset + 1, pele, level + 1)) < 0)
goto c2_parse_grp_fail;
goto fail;
}
// Otherwise it's a leaf
else {
if ((offset = c2_parse_target(ps, pattern, offset, pele)) < 0)
goto c2_parse_grp_fail;
goto fail;
assert(!pele->isbranch && !c2_ptr_isempty(*pele));
if ((offset = c2_parse_op(pattern, offset, pele)) < 0)
goto c2_parse_grp_fail;
goto fail;
if ((offset = c2_parse_pattern(ps, pattern, offset, pele)) < 0)
goto c2_parse_grp_fail;
goto fail;
if (!c2_l_postprocess(ps, pele->l))
goto c2_parse_grp_fail;
goto fail;
}
// Decrement offset -- we will increment it in loop update
--offset;
@ -586,20 +568,13 @@ c2_parse_grp(session_t *ps, const char *pattern, int offset, c2_ptr_t *presult,
return offset;
c2_parse_grp_fail:
fail:
c2_freep(&eles[0]);
c2_freep(&eles[1]);
return -1;
}
#undef c2_error
#define c2_error(format, ...) do { \
printf_err("Pattern \"%s\" pos %d: " format, pattern, offset, \
## __VA_ARGS__); \
return -1; \
} while(0)
/**
* Parse the target part of a rule.
*/
@ -734,11 +709,11 @@ c2_parse_target(session_t *ps, const char *pattern, int offset, c2_ptr_t *presul
if (type) {
if (pleaf->predef) {
printf_errf("(): Warning: Type specified for a default target will be ignored.");
log_warn("Type specified for a default target will be ignored.");
}
else {
if (pleaf->type && type != pleaf->type)
printf_errf("(): Warning: Default type overridden on target.");
log_warn("Default type overridden on target.");
pleaf->type = type;
}
}
@ -764,13 +739,12 @@ c2_parse_target(session_t *ps, const char *pattern, int offset, c2_ptr_t *presul
// Write format
if (hasformat) {
if (pleaf->predef)
printf_errf("(): Warning: Format \"%d\" specified on a default target will be ignored.", format);
log_warn("Format \"%d\" specified on a default target will be ignored.", format);
else if (C2_L_TSTRING == pleaf->type)
printf_errf("(): Warning: Format \"%d\" specified on a string target will be ignored.", format);
log_warn("Format \"%d\" specified on a string target will be ignored.", format);
else {
if (pleaf->format && pleaf->format != format)
printf_err("Warning: Default format %d overridden on target.",
pleaf->format);
log_warn("Default format %d overridden on target.", pleaf->format);
pleaf->format = format;
}
}
@ -787,6 +761,9 @@ c2_parse_target(session_t *ps, const char *pattern, int offset, c2_ptr_t *presul
c2_error("Invalid format.");
return offset;
fail:
return -1;
}
/**
@ -852,6 +829,9 @@ c2_parse_op(const char *pattern, int offset, c2_ptr_t *presult) {
c2_error("Exists/greater-than/less-than operators cannot have a qualifier.");
return offset;
fail:
return -1;
}
/**
@ -988,6 +968,9 @@ c2_parse_pattern(session_t *ps, const char *pattern, int offset, c2_ptr_t *presu
c2_error("String pattern cannot have an arithmetic operator.");
return offset;
fail:
return -1;
}
/**
@ -1054,12 +1037,12 @@ c2_parse_legacy(session_t *ps, const char *pattern, int offset, c2_ptr_t *presul
return -1;
return offset;
fail:
return -1;
}
#undef c2_error
#define c2_error(format, ...) { \
printf_err(format, ## __VA_ARGS__); \
return false; }
/**
* Do postprocessing on a condition leaf.
@ -1075,8 +1058,10 @@ c2_l_postprocess(session_t *ps, c2_l_t *pleaf) {
// Get target atom if it's not a predefined one
if (!pleaf->predef) {
pleaf->tgtatom = get_atom(ps, pleaf->tgt);
if (!pleaf->tgtatom)
c2_error("Failed to get atom for target \"%s\".", pleaf->tgt);
if (!pleaf->tgtatom) {
log_error("Failed to get atom for target \"%s\".", pleaf->tgt);
return false;
}
}
// Insert target Atom into atom track list
@ -1115,7 +1100,7 @@ c2_l_postprocess(session_t *ps, c2_l_t *pleaf) {
if (!pleaf->predef) {
for (const char *pc = pleaf->tgt; *pc; ++pc) {
if (islower(*pc)) {
printf_errf("(): Warning: Lowercase character in target name \"%s\".", pleaf->tgt);
log_warn("Lowercase character in target name \"%s\".", pleaf->tgt);
break;
}
}
@ -1135,9 +1120,11 @@ c2_l_postprocess(session_t *ps, c2_l_t *pleaf) {
// Compile PCRE expression
pleaf->regex_pcre = pcre_compile(pleaf->ptnstr, options,
&error, &erroffset, NULL);
if (!pleaf->regex_pcre)
c2_error("Pattern \"%s\": PCRE regular expression parsing failed on "
if (!pleaf->regex_pcre) {
log_error("Pattern \"%s\": PCRE regular expression parsing failed on "
"offset %d: %s", pleaf->ptnstr, erroffset, error);
return false;
}
#ifdef CONFIG_REGEX_PCRE_JIT
pleaf->regex_pcre_extra = pcre_study(pleaf->regex_pcre,
PCRE_STUDY_JIT_COMPILE, &error);
@ -1151,7 +1138,8 @@ c2_l_postprocess(session_t *ps, c2_l_t *pleaf) {
// free(pleaf->tgt);
// pleaf->tgt = NULL;
#else
c2_error("PCRE regular expression support not compiled in.");
log_error("PCRE regular expression support not compiled in.");
return false;
#endif
}
@ -1237,7 +1225,7 @@ c2h_dump_str_type(const c2_l_t *pleaf) {
* Dump a condition tree.
*/
static void
c2_dump_raw(c2_ptr_t p) {
c2_dump(c2_ptr_t p) {
// For a branch
if (p.isbranch) {
const c2_b_t * const pbranch = p.b;
@ -1249,7 +1237,7 @@ c2_dump_raw(c2_ptr_t p) {
putchar('!');
printf("(");
c2_dump_raw(pbranch->opr1);
c2_dump(pbranch->opr1);
switch (pbranch->op) {
case C2_B_OAND: printf(" && "); break;
@ -1258,7 +1246,7 @@ c2_dump_raw(c2_ptr_t p) {
default: assert(0); break;
}
c2_dump_raw(pbranch->opr2);
c2_dump(pbranch->opr2);
printf(")");
}
// For a leaf
@ -1592,7 +1580,7 @@ c2_match_once(session_t *ps, win *w, const c2_ptr_t cond) {
}
#ifdef DEBUG_WINMATCH
printf_dbgf("(%#010lx): branch: result = %d, pattern = ", w->id, result);
log_trace("(%#010lx): branch: result = %d, pattern = ", w->id, result);
c2_dump(cond);
#endif
}
@ -1612,7 +1600,7 @@ c2_match_once(session_t *ps, win *w, const c2_ptr_t cond) {
}
#ifdef DEBUG_WINMATCH
printf_dbgf("(%#010lx): leaf: result = %d, error = %d, "
log_trace("(%#010lx): leaf: result = %d, error = %d, "
"client = %#010lx, pattern = ",
w->id, result, error, w->client_win);
c2_dump(cond);