📄 print.c
字号:
rv = strlen (s); if (rv >= len) rv = len - 1; strncpy (buf, s, rv); buf [rv] = 0; return rv; case expr_encapsulate: rv = 13; strcpy (buf, "(encapsulate "); rv += expr -> data.encapsulate.len; if (rv + 2 > len) rv = len - 2; strncpy (buf, (const char *)expr -> data.encapsulate.data, rv - 13); buf [rv++] = ')'; buf [rv++] = 0; break; case expr_extract_int8: if (len > 7) { rv = 6; strcpy (buf, "(int8 "); rv += print_subexpression (expr -> data.extract_int, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_extract_int16: if (len > 8) { rv = 7; strcpy (buf, "(int16 "); rv += print_subexpression (expr -> data.extract_int, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_extract_int32: if (len > 8) { rv = 7; strcpy (buf, "(int32 "); rv += print_subexpression (expr -> data.extract_int, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_encode_int8: if (len > 7) { rv = 6; strcpy (buf, "(to-int8 "); rv += print_subexpression (expr -> data.encode_int, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_encode_int16: if (len > 8) { rv = 7; strcpy (buf, "(to-int16 "); rv += print_subexpression (expr -> data.encode_int, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_encode_int32: if (len > 8) { rv = 7; strcpy (buf, "(to-int32 "); rv += print_subexpression (expr -> data.encode_int, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_const_int: s = print_dec_1 (expr -> data.const_int); rv = strlen (s); if (len > rv) { strcpy (buf, s); return rv; } break; case expr_exists: rv = 10 + (strlen (expr -> data.option -> name) + strlen (expr -> data.option -> universe -> name)); if (len > rv) { sprintf (buf, "(exists %s.%s)", expr -> data.option -> universe -> name, expr -> data.option -> name); return rv; } break; case expr_variable_exists: rv = 10 + strlen (expr -> data.variable); if (len > rv) { sprintf (buf, "(defined %s)", expr -> data.variable); return rv; } break; case expr_variable_reference: rv = strlen (expr -> data.variable); if (len > rv) { sprintf (buf, "%s", expr -> data.variable); return rv; } break; case expr_known: s = "known"; astring: rv = strlen (s); if (len > rv) { strcpy (buf, s); return rv; } break; case expr_leased_address: s = "leased-address"; goto astring; case expr_client_state: s = "client-state"; goto astring; case expr_host_decl_name: s = "host-decl-name"; goto astring; case expr_lease_time: s = "lease-time"; goto astring; case expr_static: s = "static"; goto astring; case expr_filename: s = "filename"; goto astring; case expr_sname: s = "server-name"; goto astring; case expr_reverse: if (len > 11) { rv = 13; strcpy (buf, "(reverse "); rv += print_subexpression (expr -> data.reverse.width, buf + rv, len - rv - 2); buf [rv++] = ' '; rv += print_subexpression (expr -> data.reverse.buffer, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_binary_to_ascii: if (len > 5) { rv = 9; strcpy (buf, "(b2a "); rv += print_subexpression (expr -> data.b2a.base, buf + rv, len - rv - 4); buf [rv++] = ' '; rv += print_subexpression (expr -> data.b2a.width, buf + rv, len - rv - 3); buf [rv++] = ' '; rv += print_subexpression (expr -> data.b2a.seperator, buf + rv, len - rv - 2); buf [rv++] = ' '; rv += print_subexpression (expr -> data.b2a.buffer, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_dns_transaction: rv = 10; if (len < rv + 2) { buf [0] = '('; strcpy (&buf [1], "ns-update "); while (len < rv + 2) { rv += print_subexpression (expr -> data.dns_transaction.car, buf + rv, len - rv - 2); buf [rv++] = ' '; expr = expr -> data.dns_transaction.cdr; } buf [rv - 1] = ')'; buf [rv] = 0; return rv; } return 0; case expr_ns_delete: s = "delete"; left = 4; goto dodnsupd; case expr_ns_exists: s = "exists"; left = 4; goto dodnsupd; case expr_ns_not_exists: s = "not_exists"; left = 4; goto dodnsupd; case expr_ns_add: s = "update"; left = 5; dodnsupd: rv = strlen (s); if (len > strlen (s) + 1) { buf [0] = '('; strcpy (buf + 1, s); rv++; buf [rv++] = ' '; s = print_dec_1 (expr -> data.ns_add.rrclass); if (len > rv + strlen (s) + left) { strcpy (&buf [rv], s); rv += strlen (&buf [rv]); } buf [rv++] = ' '; left--; s = print_dec_1 (expr -> data.ns_add.rrtype); if (len > rv + strlen (s) + left) { strcpy (&buf [rv], s); rv += strlen (&buf [rv]); } buf [rv++] = ' '; left--; rv += print_subexpression (expr -> data.ns_add.rrname, buf + rv, len - rv - left); buf [rv++] = ' '; left--; rv += print_subexpression (expr -> data.ns_add.rrdata, buf + rv, len - rv - left); buf [rv++] = ' '; left--; rv += print_subexpression (expr -> data.ns_add.ttl, buf + rv, len - rv - left); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_null: if (len > 6) { strcpy (buf, "(null)"); return 6; } break; case expr_funcall: rv = 12 + strlen (expr -> data.funcall.name); if (len > rv + 1) { strcpy (buf, "(funcall "); strcpy (buf + 9, expr -> data.funcall.name); buf [rv++] = ' '; rv += print_subexpression (expr -> data.funcall.arglist, buf + rv, len - rv - 1); buf [rv++] = ')'; buf [rv] = 0; return rv; } break; case expr_arg: rv = print_subexpression (expr -> data.arg.val, buf, len); if (expr -> data.arg.next && rv + 2 < len) { buf [rv++] = ' '; rv += print_subexpression (expr -> data.arg.next, buf, len); if (rv + 1 < len) buf [rv++] = 0; return rv; } break; case expr_function: rv = 9; if (len > rv + 1) { struct string_list *foo; strcpy (buf, "(function"); for (foo = expr -> data.func -> args; foo; foo = foo -> next) { if (len > rv + 2 + strlen (foo -> string)) { buf [rv - 1] = ' '; strcpy (&buf [rv], foo -> string); rv += strlen (foo -> string); } } buf [rv] = ')'; buf [rv++] = 0; return rv; } } return 0;}void print_expression (name, expr) const char *name; struct expression *expr;{ char buf [1024]; print_subexpression (expr, buf, sizeof buf); log_info ("%s: %s", name, buf);}int token_print_indent_concat (FILE *file, int col, int indent, const char *prefix, const char *suffix, ...){ va_list list; char *buf; unsigned len; char *s, *t, *u; va_start (list, suffix); s = va_arg (list, char *); len = 0; while (s) { len += strlen (s); s = va_arg (list, char *); } va_end (list); t = dmalloc (len + 1, MDL); if (!t) log_fatal ("token_print_indent: no memory for copy buffer"); va_start (list, suffix); s = va_arg (list, char *); u = t; while (s) { len = strlen (s); strcpy (u, s); u += len; } va_end (list); len = token_print_indent (file, col, indent, prefix, suffix, t); dfree (t, MDL); return col;}int token_indent_data_string (FILE *file, int col, int indent, const char *prefix, const char *suffix, struct data_string *data){ int i; char *buf; char obuf [3]; /* See if this is just ASCII. */ for (i = 0; i < data -> len; i++) if (!isascii (data -> data [i]) || !isprint (data -> data [i])) break; /* If we have a purely ASCII string, output it as text. */ if (i == data -> len) { char *buf = dmalloc (data -> len + 3, MDL); if (buf) { buf [0] = '"'; memcpy (buf + 1, data -> data, data -> len); buf [data -> len + 1] = '"'; buf [data -> len + 2] = 0; i = token_print_indent (file, col, indent, prefix, suffix, buf); dfree (buf, MDL); return i; } } for (i = 0; i < data -> len; i++) { sprintf (obuf, "%2.2x", data -> data [i]); col = token_print_indent (file, col, indent, i == 0 ? prefix : "", (i + 1 == data -> len ? suffix : ""), obuf); if (i + 1 != data -> len) col = token_print_indent (file, col, indent, prefix, suffix, ":"); } return col;}int token_print_indent (FILE *file, int col, int indent, const char *prefix, const char *suffix, const char *buf){ int len = strlen (buf) + strlen (prefix); if (col + len > 79) { if (indent + len < 79) { indent_spaces (file, indent); col = indent; } else { indent_spaces (file, col); col = len > 79 ? 0 : 79 - len - 1; } } else if (prefix && *prefix) { fputs (prefix, file); col += strlen (prefix); } fputs (buf, file); col += len; if (suffix && *suffix) { if (col + strlen (suffix) > 79) { indent_spaces (file, indent); col = indent; } else { fputs (suffix, file); col += strlen (suffix); } } return col;}void indent_spaces (FILE *file, int indent){ int i; fputc ('\n', file); for (i = 0; i < indent; i++) fputc (' ', file);}#if defined (NSUPDATE)void print_dns_status (int status, ns_updque *uq){ char obuf [1024]; char *s = &obuf [0], *end = &obuf [1022]; ns_updrec *u; int position; int ttlp; const char *predicate = "if", *en, *op; int errorp; for (u = ISC_LIST_HEAD (*uq); u; u = ISC_LIST_NEXT (u, r_link)) { ttlp = 0; switch (u -> r_opcode) { case NXRRSET: op = "rrset doesn't exist"; position = 1; break; case YXRRSET: op = "rrset exists"; position = 1; break; case NXDOMAIN: op = "domain doesn't exist"; position = 1; break; case YXDOMAIN: op = "domain exists"; position = 1; break; case ADD: op = "add"; position = 0; ttlp = 1; break; case DELETE: op = "delete"; position = 0; break; default: op = "unknown"; position = 0; break; } if (!position) { if (s != &obuf [0] && s + 1 < end) *s++ = ' '; if (s + strlen (op) < end) { strcpy (s, op); s += strlen (s); } } else { if (s != &obuf [0] && s + 1 < end) *s++ = ' '; if (s + strlen (predicate) < end) { strcpy (s, predicate); s += strlen (s); } predicate = "and"; } if (u -> r_dname) { if (s + 1 < end) *s++ = ' '; if (s + strlen (u -> r_dname) < end) { strcpy (s, u -> r_dname); s += strlen (s); } } if (ttlp) { if (s + 1 < end) *s++ = ' '; /* 27 is as big as a ttl can get. */ if (s + 27 < end) { sprintf (s, "%lu", (unsigned long)(u -> r_ttl)); s += strlen (s); } } switch (u -> r_class) { case C_IN: en = "IN"; break; case C_CHAOS: en = "CHAOS"; break; case C_HS: en = "HS"; break; default: en = "UNKNOWN"; break; } if (s + strlen (en) < end) { if (s + 1 < end) *s++ = ' '; strcpy (s, en); s += strlen (en); } switch (u -> r_type) { case T_A: en = "A"; break; case T_PTR: en = "PTR"; break; case T_MX: en = "MX"; break; case T_TXT: en = "TXT"; break; case T_KEY: en = "KEY"; break; case T_CNAME: en = "CNAME"; break; default: en = "UNKNOWN"; break; } if (s + strlen (en) < end) { if (s + 1 < end) *s++ = ' '; strcpy (s, en); s += strlen (en); } if (u -> r_data) { if (s + 1 < end) *s++ = ' '; if (u -> r_type == T_TXT) { if (s + 1 < end) *s++ = '"'; } if(u->r_type == T_KEY) { strcat(s, "<keydata>"); s+=strlen("<keydata>"); } else { if (s + u -> r_size < end) { memcpy (s, u -> r_data, u -> r_size); s += u -> r_size; if (u -> r_type == T_TXT) { if (s + 1 < end) *s++ = '"'; } } } } if (position) { if (s + 1 < end) *s++ = ' '; if (s + strlen (op) < end) { strcpy (s, op); s += strlen (s); } } if (u == ISC_LIST_TAIL (*uq)) break; } if (s == &obuf [0]) { strcpy (s, "empty update"); s += strlen (s); } if (status == NOERROR) errorp = 0; else errorp = 1; en = isc_result_totext (status);#if 0 switch (status) { case -1: en = "resolver failed"; break; case FORMERR: en = "format error"; break; case NOERROR: en = "succeeded"; errorp = 0; break; case NOTAUTH: en = "not authorized"; break; case NOTIMP: en = "not implemented"; break; case NOTZONE: en = "not a single valid zone"; break; case NXDOMAIN: en = "no such domain"; break; case NXRRSET: en = "no such record"; break; case REFUSED: en = "refused"; break; case SERVFAIL: en = "server failed"; break; case YXDOMAIN: en = "domain exists"; break; case YXRRSET: en = "record exists"; break; default: en = "unknown error"; break; }#endif if (s + 2 < end) { *s++ = ':'; *s++ = ' '; } if (s + strlen (en) < end) { strcpy (s, en); s += strlen (en); } if (s + 1 < end) *s++ = '.'; *s++ = 0; if (errorp) log_error ("%s", obuf); else log_info ("%s", obuf);}#endif /* NSUPDATE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -