X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/77453f535584e4854488c0325e4cf67b19180edd..6c8ef0eb86a39c277d1a43802dd8ea01b51cfb2a:/print.c diff --git a/print.c b/print.c index ee8ee97b..c76f3441 100644 --- a/print.c +++ b/print.c @@ -226,23 +226,16 @@ static const struct printer printers[] = { static void ndo_default_print(netdissect_options *ndo, const u_char *bp, u_int length); -static void ndo_error(netdissect_options *ndo _U_, const char *fmt, ...) - __attribute__((noreturn)) -#ifdef __ATTRIBUTE___FORMAT_OK - __attribute__((format (printf, 2, 3))) -#endif /* __ATTRIBUTE___FORMAT_OK */ - ; -static void ndo_warning(netdissect_options *ndo _U_, const char *fmt, ...) -#ifdef __ATTRIBUTE___FORMAT_OK - __attribute__((format (printf, 2, 3))) -#endif /* __ATTRIBUTE___FORMAT_OK */ - ; - -static int ndo_printf(netdissect_options *ndo _U_, const char *fmt, ...) -#ifdef __ATTRIBUTE___FORMAT_OK - __attribute ((format (printf, 2, 3))) -#endif /* __ATTRIBUTE___FORMAT_OK */ - ; +static void ndo_error(netdissect_options *ndo, + FORMAT_STRING(const char *fmt), ...) + NORETURN PRINTFLIKE(2, 3); +static void ndo_warning(netdissect_options *ndo, + FORMAT_STRING(const char *fmt), ...) + PRINTFLIKE(2, 3); + +static int ndo_printf(netdissect_options *ndo, + FORMAT_STRING(const char *fmt), ...) + PRINTFLIKE(2, 3); void init_print(netdissect_options *ndo, uint32_t localnet, uint32_t mask, @@ -401,7 +394,7 @@ pretty_print_packet(netdissect_options *ndo, const struct pcap_pkthdr *h, } } - putchar('\n'); + ND_PRINT((ndo, "\n")); } /* @@ -429,6 +422,7 @@ ndo_error(netdissect_options *ndo, const char *fmt, ...) if (fmt[-1] != '\n') (void)fputc('\n', stderr); } + nd_cleanup(); exit(1); /* NOTREACHED */ } @@ -453,7 +447,7 @@ ndo_warning(netdissect_options *ndo, const char *fmt, ...) } static int -ndo_printf(netdissect_options *ndo _U_, const char *fmt, ...) +ndo_printf(netdissect_options *ndo, const char *fmt, ...) { va_list args; int ret; @@ -462,6 +456,8 @@ ndo_printf(netdissect_options *ndo _U_, const char *fmt, ...) ret = vfprintf(stdout, fmt, args); va_end(args); + if (ret < 0) + ndo_error(ndo, "Unable to write output: %s", pcap_strerror(errno)); return (ret); }