const char *dict_flags_str(int dict_flags) { static VSTRING *buf = 0; if (buf == 0) buf = vstring_alloc(1); return (str_name_mask_opt(buf, "dictionary flags", dict_mask, dict_flags, NAME_MASK_NUMBER | NAME_MASK_PIPE)); }
static const char *strategy_to_string(VSTRING *res_buf, int strategy_mask) { static VSTRING *my_buf; if (res_buf == 0 && (res_buf = my_buf) == 0) res_buf = my_buf = vstring_alloc(20); return (str_name_mask_opt(res_buf, "strategy_to_string", strategy_table, strategy_mask, NAME_MASK_WARN | NAME_MASK_PIPE)); }
static void pcf_check_compat_options(int optval) { const char *myname = "pcf_check_compat_options"; VSTRING *buf1 = vstring_alloc(10); VSTRING *buf2 = vstring_alloc(10); const int (*op)[2]; int excess; for (op = pcf_compat_options; op[0][0] != 0; op++) { if ((optval & *op[0]) != 0 && (excess = (optval & ~((*op)[0] | (*op)[1]))) != 0) msg_fatal("with option %s, do not specify %s", str_name_mask_opt(buf1, myname, pcf_compat_names, (*op)[0], NAME_MASK_NUMBER), str_name_mask_opt(buf2, myname, pcf_compat_names, excess, NAME_MASK_NUMBER)); } vstring_free(buf1); vstring_free(buf2); }
int main(int argc, char **argv) { static const NAME_MASK demo_table[] = { "zero", 1 << 0, "one", 1 << 1, "two", 1 << 2, "three", 1 << 3, 0, 0, }; static const NAME_MASK feature_table[] = { "DEFAULT", NAME_MASK_DEFAULT, "FATAL", NAME_MASK_FATAL, "ANY_CASE", NAME_MASK_ANY_CASE, "RETURN", NAME_MASK_RETURN, "COMMA", NAME_MASK_COMMA, "PIPE", NAME_MASK_PIPE, "NUMBER", NAME_MASK_NUMBER, "WARN", NAME_MASK_WARN, "IGNORE", NAME_MASK_IGNORE, 0, }; int in_feature_mask; int out_feature_mask; int demo_mask; const char *demo_str; VSTRING *out_buf = vstring_alloc(1); VSTRING *in_buf = vstring_alloc(1); if (argc != 3) msg_fatal("usage: %s in-feature-mask out-feature-mask", argv[0]); in_feature_mask = name_mask(argv[1], feature_table, argv[1]); out_feature_mask = name_mask(argv[2], feature_table, argv[2]); while (vstring_get_nonl(in_buf, VSTREAM_IN) != VSTREAM_EOF) { demo_mask = name_mask_opt("name", demo_table, STR(in_buf), in_feature_mask); demo_str = str_name_mask_opt(out_buf, "mask", demo_table, demo_mask, out_feature_mask); vstream_printf("%s -> 0x%x -> %s\n", STR(in_buf), demo_mask, demo_str ? demo_str : "(null)"); vstream_fflush(VSTREAM_OUT); } vstring_free(in_buf); vstring_free(out_buf); exit(0); }
const char *psc_print_state_flags(int flags, const char *context) { static const NAME_MASK flags_mask[] = { "NOFORWARD", PSC_STATE_FLAG_NOFORWARD, "USING_TLS", PSC_STATE_FLAG_USING_TLS, "NEW", PSC_STATE_FLAG_NEW, "BLIST_FAIL", PSC_STATE_FLAG_BLIST_FAIL, "HANGUP", PSC_STATE_FLAG_HANGUP, /* unused */ "WLIST_FAIL", PSC_STATE_FLAG_WLIST_FAIL, "PENAL_UPDATE", PSC_STATE_FLAG_PENAL_UPDATE, "PENAL_FAIL", PSC_STATE_FLAG_PENAL_FAIL, "PREGR_FAIL", PSC_STATE_FLAG_PREGR_FAIL, "PREGR_PASS", PSC_STATE_FLAG_PREGR_PASS, "PREGR_TODO", PSC_STATE_FLAG_PREGR_TODO, "PREGR_DONE", PSC_STATE_FLAG_PREGR_DONE, "DNSBL_FAIL", PSC_STATE_FLAG_DNSBL_FAIL, "DNSBL_PASS", PSC_STATE_FLAG_DNSBL_PASS, "DNSBL_TODO", PSC_STATE_FLAG_DNSBL_TODO, "DNSBL_DONE", PSC_STATE_FLAG_DNSBL_DONE, "PIPEL_FAIL", PSC_STATE_FLAG_PIPEL_FAIL, "PIPEL_PASS", PSC_STATE_FLAG_PIPEL_PASS, "PIPEL_TODO", PSC_STATE_FLAG_PIPEL_TODO, "PIPEL_SKIP", PSC_STATE_FLAG_PIPEL_SKIP, "NSMTP_FAIL", PSC_STATE_FLAG_NSMTP_FAIL, "NSMTP_PASS", PSC_STATE_FLAG_NSMTP_PASS, "NSMTP_TODO", PSC_STATE_FLAG_NSMTP_TODO, "NSMTP_SKIP", PSC_STATE_FLAG_NSMTP_SKIP, "BARLF_FAIL", PSC_STATE_FLAG_BARLF_FAIL, "BARLF_PASS", PSC_STATE_FLAG_BARLF_PASS, "BARLF_TODO", PSC_STATE_FLAG_BARLF_TODO, "BARLF_SKIP", PSC_STATE_FLAG_BARLF_SKIP, 0, }; return (str_name_mask_opt((VSTRING *) 0, context, flags_mask, flags, NAME_MASK_PIPE | NAME_MASK_NUMBER)); }