]> The Tcpdump Group git mirrors - tcpdump/blobdiff - util-print.c
Fix spaces
[tcpdump] / util-print.c
index 892e07a73c990b296190f59edaf6da067b3459a3..7f23a4b037b68f0081e41be537d56ba57107d887 100644 (file)
  */
 
 #ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
 #endif
 
-#include <netdissect-stdinc.h>
+#include "netdissect-stdinc.h"
 
 #include <sys/stat.h>
 
@@ -53,6 +53,7 @@
 #include <string.h>
 
 #include "netdissect.h"
+#include "extract.h"
 #include "ascii_strcasecmp.h"
 #include "timeval-operations.h"
 
@@ -60,12 +61,6 @@ int32_t thiszone;            /* seconds offset from gmt to local time */
 /* invalid string to print '(invalid)' for malformed or corrupted packets */
 const char istr[] = " (invalid)";
 
-/*
- * timestamp display buffer size, the biggest size of both formats is needed
- * sizeof("0000000000.000000000") > sizeof("00:00:00.000000000")
- */
-#define TS_BUF_SIZE sizeof("0000000000.000000000")
-
 #define TOKBUFSIZE 128
 
 /*
@@ -76,68 +71,88 @@ fn_print_char(netdissect_options *ndo, u_char c)
 {
        if (!ND_ISASCII(c)) {
                c = ND_TOASCII(c);
-               ND_PRINT((ndo, "M-"));
+               ND_PRINT("M-");
        }
        if (!ND_ISPRINT(c)) {
                c ^= 0x40;      /* DEL to ?, others to alpha */
-               ND_PRINT((ndo, "^"));
+               ND_PRINT("^");
        }
-       ND_PRINT((ndo, "%c", c));
+       ND_PRINT("%c", c);
+}
+
+/*
+ * Print a null-terminated string, filtering out non-printable characters.
+ * DON'T USE IT with a pointer on the packet buffer because there is no
+ * truncation check. For this use, see the nd_printX() functions below.
+ */
+void
+fn_print_str(netdissect_options *ndo, const u_char *s)
+{
+       while (*s != '\0') {
+               fn_print_char(ndo, *s);
+               s++;
+       }
 }
 
 /*
- * Print out a null-terminated filename (or other ASCII string).
+ * Print out a null-terminated filename (or other ASCII string), part of
+ * the packet buffer.
  * If ep is NULL, assume no truncation check is needed.
  * Return true if truncated.
  * Stop at ep (if given) or before the null char, whichever is first.
  */
 int
-fn_print(netdissect_options *ndo,
-         register const u_char *s, register const u_char *ep)
+nd_print(netdissect_options *ndo,
+         const u_char *s, const u_char *ep)
 {
-       register int ret;
-       register u_char c;
+       int ret;
+       u_char c;
 
        ret = 1;                        /* assume truncated */
        while (ep == NULL || s < ep) {
-               c = *s++;
+               c = EXTRACT_U_1(s);
+               s++;
                if (c == '\0') {
                        ret = 0;
                        break;
                }
-               if (!ND_ISASCII(c)) {
-                       c = ND_TOASCII(c);
-                       ND_PRINT((ndo, "M-"));
-               }
-               if (!ND_ISPRINT(c)) {
-                       c ^= 0x40;      /* DEL to ?, others to alpha */
-                       ND_PRINT((ndo, "^"));
-               }
-               ND_PRINT((ndo, "%c", c));
+               fn_print_char(ndo, c);
        }
        return(ret);
 }
 
 /*
  * Print out a null-terminated filename (or other ASCII string) from
- * a fixed-length buffer.
- * If ep is NULL, assume no truncation check is needed.
+ * a fixed-length field in the packet buffer, or from what remains of
+ * the packet.
+ *
+ * n is the length of the fixed-length field, or the number of bytes
+ * remaining in the packet based on its on-the-network length.
+ *
+ * If ep is non-null, it should point just past the last captured byte
+ * of the packet, e.g. ndo->ndo_snapend.  If ep is NULL, we assume no
+ * truncation check, other than the checks of the field length/remaining
+ * packet data length, is needed.
+ *
  * Return the number of bytes of string processed, including the
- * terminating null, if not truncated.  Return 0 if truncated.
+ * terminating null, if not truncated; as the terminating null is
+ * included in the count, and as there must be a terminating null,
+ * this will always be non-zero.  Return 0 if truncated.
  */
 u_int
-fn_printztn(netdissect_options *ndo,
-         register const u_char *s, register u_int n, register const u_char *ep)
+nd_printztn(netdissect_options *ndo,
+         const u_char *s, u_int n, const u_char *ep)
 {
-       register u_int bytes;
-       register u_char c;
+       u_int bytes;
+       u_char c;
 
        bytes = 0;
        for (;;) {
                if (n == 0 || (ep != NULL && s >= ep)) {
                        /*
                         * Truncated.  This includes "no null before we
-                        * got to the end of the fixed-length buffer".
+                        * got to the end of the fixed-length buffer or
+                        * the end of the packet".
                         *
                         * XXX - BOOTP says "null-terminated", which
                         * means the maximum length of the string, in
@@ -148,162 +163,125 @@ fn_printztn(netdissect_options *ndo,
                        break;
                }
 
-               c = *s++;
+               c = EXTRACT_U_1(s);
+               s++;
                bytes++;
                n--;
                if (c == '\0') {
                        /* End of string */
                        break;
                }
-               if (!ND_ISASCII(c)) {
-                       c = ND_TOASCII(c);
-                       ND_PRINT((ndo, "M-"));
-               }
-               if (!ND_ISPRINT(c)) {
-                       c ^= 0x40;      /* DEL to ?, others to alpha */
-                       ND_PRINT((ndo, "^"));
-               }
-               ND_PRINT((ndo, "%c", c));
+               fn_print_char(ndo, c);
        }
        return(bytes);
 }
 
 /*
- * Print out a counted filename (or other ASCII string).
+ * Print out a counted filename (or other ASCII string), part of
+ * the packet buffer.
  * If ep is NULL, assume no truncation check is needed.
  * Return true if truncated.
  * Stop at ep (if given) or after n bytes, whichever is first.
  */
 int
-fn_printn(netdissect_options *ndo,
-          register const u_char *s, register u_int n, register const u_char *ep)
+nd_printn(netdissect_options *ndo,
+          const u_char *s, u_int n, const u_char *ep)
 {
-       register u_char c;
+       u_char c;
 
        while (n > 0 && (ep == NULL || s < ep)) {
                n--;
-               c = *s++;
-               if (!ND_ISASCII(c)) {
-                       c = ND_TOASCII(c);
-                       ND_PRINT((ndo, "M-"));
-               }
-               if (!ND_ISPRINT(c)) {
-                       c ^= 0x40;      /* DEL to ?, others to alpha */
-                       ND_PRINT((ndo, "^"));
-               }
-               ND_PRINT((ndo, "%c", c));
+               c = EXTRACT_U_1(s);
+               s++;
+               fn_print_char(ndo, c);
        }
        return (n == 0) ? 0 : 1;
 }
 
 /*
- * Print out a null-padded filename (or other ASCII string).
+ * Print out a null-padded filename (or other ASCII string), part of
+ * the packet buffer.
  * If ep is NULL, assume no truncation check is needed.
  * Return true if truncated.
  * Stop at ep (if given) or after n bytes or before the null char,
  * whichever is first.
  */
 int
-fn_printzp(netdissect_options *ndo,
-           register const u_char *s, register u_int n,
-           register const u_char *ep)
+nd_printzp(netdissect_options *ndo,
+           const u_char *s, u_int n,
+           const u_char *ep)
 {
-       register int ret;
-       register u_char c;
+       int ret;
+       u_char c;
 
        ret = 1;                        /* assume truncated */
        while (n > 0 && (ep == NULL || s < ep)) {
                n--;
-               c = *s++;
+               c = EXTRACT_U_1(s);
+               s++;
                if (c == '\0') {
                        ret = 0;
                        break;
                }
-               if (!ND_ISASCII(c)) {
-                       c = ND_TOASCII(c);
-                       ND_PRINT((ndo, "M-"));
-               }
-               if (!ND_ISPRINT(c)) {
-                       c ^= 0x40;      /* DEL to ?, others to alpha */
-                       ND_PRINT((ndo, "^"));
-               }
-               ND_PRINT((ndo, "%c", c));
+               fn_print_char(ndo, c);
        }
        return (n == 0) ? 0 : ret;
 }
 
 /*
- * Format the timestamp
+ * Print the timestamp as HH:MM:SS.FRAC.
  */
-static char *
-ts_format(netdissect_options *ndo
-#ifndef HAVE_PCAP_SET_TSTAMP_PRECISION
-_U_
-#endif
-, int sec, int usec, char *buf)
+static void
+ts_hmsfrac_print(netdissect_options *ndo, int sec, int usec)
 {
-       const char *format;
-
 #ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
        switch (ndo->ndo_tstamp_precision) {
 
        case PCAP_TSTAMP_PRECISION_MICRO:
-               format = "%02d:%02d:%02d.%06u";
+               ND_PRINT("%02d:%02d:%02d.%06u", sec / 3600, (sec % 3600) / 60,
+                   sec % 60, usec);
                break;
 
        case PCAP_TSTAMP_PRECISION_NANO:
-               format = "%02d:%02d:%02d.%09u";
+               ND_PRINT("%02d:%02d:%02d.%09u", sec / 3600, (sec % 3600) / 60,
+                   sec % 60, usec);
                break;
 
        default:
-               format = "%02d:%02d:%02d.{unknown}";
+               ND_PRINT("%02d:%02d:%02d.{unknown}", sec / 3600, (sec % 3600) / 60,
+                   sec % 60);
                break;
        }
 #else
-       format = "%02d:%02d:%02d.%06u";
+       ND_PRINT("%02d:%02d:%02d.%06u", sec / 3600, (sec % 3600) / 60,
+           sec % 60, usec);
 #endif
-
-       snprintf(buf, TS_BUF_SIZE, format,
-                 sec / 3600, (sec % 3600) / 60, sec % 60, usec);
-
-        return buf;
 }
 
 /*
- * Format the timestamp - Unix timeval style
+ * Print the timestamp - Unix timeval style, as SECS.FRAC.
  */
-static char *
-ts_unix_format(netdissect_options *ndo
-#ifndef HAVE_PCAP_SET_TSTAMP_PRECISION
-_U_
-#endif
-, int sec, int usec, char *buf)
+static void
+ts_unix_print(netdissect_options *ndo, int sec, int usec)
 {
-       const char *format;
-
 #ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
        switch (ndo->ndo_tstamp_precision) {
 
        case PCAP_TSTAMP_PRECISION_MICRO:
-               format = "%u.%06u";
+               ND_PRINT("%u.%06u", (unsigned)sec, (unsigned)usec);
                break;
 
        case PCAP_TSTAMP_PRECISION_NANO:
-               format = "%u.%09u";
+               ND_PRINT("%u.%09u", (unsigned)sec, (unsigned)usec);
                break;
 
        default:
-               format = "%u.{unknown}";
+               ND_PRINT("%u.{unknown}", (unsigned)sec);
                break;
        }
 #else
-       format = "%u.%06u";
+       ND_PRINT("%u.%06u", (unsigned)sec, (unsigned)usec);
 #endif
-
-       snprintf(buf, TS_BUF_SIZE, format,
-                (unsigned)sec, (unsigned)usec);
-
-       return buf;
 }
 
 /*
@@ -311,12 +289,11 @@ _U_
  */
 void
 ts_print(netdissect_options *ndo,
-         register const struct timeval *tvp)
+         const struct timeval *tvp)
 {
-       register int s;
+       int s;
        struct tm *tm;
        time_t Time;
-       char buf[TS_BUF_SIZE];
        static struct timeval tv_ref;
        struct timeval tv_result;
        int negative_offset;
@@ -326,15 +303,16 @@ ts_print(netdissect_options *ndo,
 
        case 0: /* Default */
                s = (tvp->tv_sec + thiszone) % 86400;
-               ND_PRINT((ndo, "%s ", ts_format(ndo, s, tvp->tv_usec, buf)));
+               ts_hmsfrac_print(ndo, s, tvp->tv_usec);
+               ND_PRINT(" ");
                break;
 
        case 1: /* No time stamp */
                break;
 
        case 2: /* Unix timeval style */
-               ND_PRINT((ndo, "%s ", ts_unix_format(ndo,
-                         tvp->tv_sec, tvp->tv_usec, buf)));
+               ts_unix_print(ndo, tvp->tv_sec, tvp->tv_usec);
+               ND_PRINT(" ");
                break;
 
        case 3: /* Microseconds/nanoseconds since previous packet */
@@ -363,10 +341,9 @@ ts_print(netdissect_options *ndo,
                else
                        netdissect_timevalsub(tvp, &tv_ref, &tv_result, nano_prec);
 
-               ND_PRINT((ndo, (negative_offset ? "-" : " ")));
-
-               ND_PRINT((ndo, "%s ", ts_format(ndo,
-                         tv_result.tv_sec, tv_result.tv_usec, buf)));
+               ND_PRINT((negative_offset ? "-" : " "));
+               ts_hmsfrac_print(ndo, tv_result.tv_sec, tv_result.tv_usec);
+               ND_PRINT(" ");
 
                 if (ndo->ndo_tflag == 3)
                        tv_ref = *tvp; /* set timestamp for previous packet */
@@ -377,11 +354,13 @@ ts_print(netdissect_options *ndo,
                Time = (tvp->tv_sec + thiszone) - s;
                tm = gmtime (&Time);
                if (!tm)
-                       ND_PRINT((ndo, "Date fail  "));
-               else
-                       ND_PRINT((ndo, "%04d-%02d-%02d %s ",
-                               tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
-                               ts_format(ndo, s, tvp->tv_usec, buf)));
+                       ND_PRINT("Date fail ");
+               else {
+                       ND_PRINT("%04d-%02d-%02d ",
+                           tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday);
+                       ts_hmsfrac_print(ndo, s, tvp->tv_usec);
+                       ND_PRINT(" ");
+               }
                break;
        }
 }
@@ -401,12 +380,12 @@ unsigned_relts_print(netdissect_options *ndo,
        const u_int *s = seconds;
 
        if (secs == 0) {
-               ND_PRINT((ndo, "0s"));
+               ND_PRINT("0s");
                return;
        }
        while (secs > 0) {
                if (secs >= *s) {
-                       ND_PRINT((ndo, "%d%s", secs / *s, *l));
+                       ND_PRINT("%u%s", secs / *s, *l);
                        secs -= (secs / *s) * *s;
                }
                s++;
@@ -424,7 +403,7 @@ signed_relts_print(netdissect_options *ndo,
                    int32_t secs)
 {
        if (secs < 0) {
-               ND_PRINT((ndo, "-"));
+               ND_PRINT("-");
                if (secs == INT32_MIN) {
                        /*
                         * -2^31; you can't fit its absolute value into
@@ -450,6 +429,12 @@ signed_relts_print(netdissect_options *ndo,
        unsigned_relts_print(ndo, secs);
 }
 
+/* Print the truncated string */
+void nd_print_trunc(netdissect_options *ndo)
+{
+       ND_PRINT(" [|%s]", ndo->ndo_protocol);
+}
+
 /*
  *  this is a generic routine for printing unknown data;
  *  we pass on the linefeed plus indentation string to
@@ -460,15 +445,15 @@ int
 print_unknown_data(netdissect_options *ndo, const u_char *cp,const char *ident,int len)
 {
        if (len < 0) {
-          ND_PRINT((ndo,"%sDissector error: print_unknown_data called with negative length",
-                   ident));
+          ND_PRINT("%sDissector error: print_unknown_data called with negative length",
+                   ident);
                return(0);
        }
        if (ndo->ndo_snapend - cp < len)
                len = ndo->ndo_snapend - cp;
        if (len < 0) {
-          ND_PRINT((ndo,"%sDissector error: print_unknown_data called with pointer past end of packet",
-                   ident));
+          ND_PRINT("%sDissector error: print_unknown_data called with pointer past end of packet",
+                   ident);
                return(0);
        }
         hex_print(ndo, ident,cp,len);
@@ -479,8 +464,8 @@ print_unknown_data(netdissect_options *ndo, const u_char *cp,const char *ident,i
  * Convert a token value to a string; use "fmt" if not found.
  */
 const char *
-tok2strbuf(register const struct tok *lp, register const char *fmt,
-          register u_int v, char *buf, size_t bufsize)
+tok2strbuf(const struct tok *lp, const char *fmt,
+          u_int v, char *buf, size_t bufsize)
 {
        if (lp != NULL) {
                while (lp->s != NULL) {
@@ -492,7 +477,7 @@ tok2strbuf(register const struct tok *lp, register const char *fmt,
        if (fmt == NULL)
                fmt = "#%d";
 
-       (void)snprintf(buf, bufsize, fmt, v);
+       (void)nd_snprintf(buf, bufsize, fmt, v);
        return (const char *)buf;
 }
 
@@ -502,8 +487,8 @@ tok2strbuf(register const struct tok *lp, register const char *fmt,
  * in round-robin fashion.
  */
 const char *
-tok2str(register const struct tok *lp, register const char *fmt,
-       register u_int v)
+tok2str(const struct tok *lp, const char *fmt,
+       u_int v)
 {
        static char buf[4][TOKBUFSIZE];
        static int idx = 0;
@@ -516,18 +501,18 @@ tok2str(register const struct tok *lp, register const char *fmt,
 
 /*
  * Convert a bit token value to a string; use "fmt" if not found.
- * this is useful for parsing bitfields, the output strings are seperated
+ * this is useful for parsing bitfields, the output strings are separated
  * if the s field is positive.
  */
 static char *
-bittok2str_internal(register const struct tok *lp, register const char *fmt,
-          register u_int v, const char *sep)
+bittok2str_internal(const struct tok *lp, const char *fmt,
+          u_int v, const char *sep)
 {
         static char buf[1024+1]; /* our string buffer */
         char *bufp = buf;
         size_t space_left = sizeof(buf), string_size;
-        register u_int rotbit; /* this is the bit we rotate through all bitpositions */
-        register u_int tokval;
+        u_int rotbit; /* this is the bit we rotate through all bitpositions */
+        u_int tokval;
         const char * sepstr = "";
 
        while (lp != NULL && lp->s != NULL) {
@@ -564,28 +549,28 @@ bittok2str_internal(register const struct tok *lp, register const char *fmt,
 
         if (bufp == buf)
             /* bummer - lets print the "unknown" message as advised in the fmt string if we got one */
-            (void)snprintf(buf, sizeof(buf), fmt == NULL ? "#%08x" : fmt, v);
+            (void)nd_snprintf(buf, sizeof(buf), fmt == NULL ? "#%08x" : fmt, v);
         return (buf);
 }
 
 /*
  * Convert a bit token value to a string; use "fmt" if not found.
- * this is useful for parsing bitfields, the output strings are not seperated.
+ * this is useful for parsing bitfields, the output strings are not separated.
  */
 char *
-bittok2str_nosep(register const struct tok *lp, register const char *fmt,
-          register u_int v)
+bittok2str_nosep(const struct tok *lp, const char *fmt,
+          u_int v)
 {
     return (bittok2str_internal(lp, fmt, v, ""));
 }
 
 /*
  * Convert a bit token value to a string; use "fmt" if not found.
- * this is useful for parsing bitfields, the output strings are comma seperated.
+ * this is useful for parsing bitfields, the output strings are comma separated.
  */
 char *
-bittok2str(register const struct tok *lp, register const char *fmt,
-          register u_int v)
+bittok2str(const struct tok *lp, const char *fmt,
+          u_int v)
 {
     return (bittok2str_internal(lp, fmt, v, ", "));
 }
@@ -597,8 +582,8 @@ bittok2str(register const struct tok *lp, register const char *fmt,
  * correct for bounds-checking.
  */
 const char *
-tok2strary_internal(register const char **lp, int n, register const char *fmt,
-       register int v)
+tok2strary_internal(const char **lp, int n, const char *fmt,
+       int v)
 {
        static char buf[TOKBUFSIZE];
 
@@ -606,7 +591,7 @@ tok2strary_internal(register const char **lp, int n, register const char *fmt,
                return lp[v];
        if (fmt == NULL)
                fmt = "#%d";
-       (void)snprintf(buf, sizeof(buf), fmt, v);
+       (void)nd_snprintf(buf, sizeof(buf), fmt, v);
        return (buf);
 }
 
@@ -690,19 +675,19 @@ fetch_token(netdissect_options *ndo, const u_char *pptr, u_int idx, u_int len,
        size_t toklen = 0;
 
        for (; idx < len; idx++) {
-               if (!ND_TTEST(*(pptr + idx))) {
+               if (!ND_TTEST_1(pptr + idx)) {
                        /* ran past end of captured data */
                        return (0);
                }
-               if (!isascii(*(pptr + idx))) {
+               if (!isascii(EXTRACT_U_1(pptr + idx))) {
                        /* not an ASCII character */
                        return (0);
                }
-               if (isspace(*(pptr + idx))) {
+               if (isspace(EXTRACT_U_1(pptr + idx))) {
                        /* end of token */
                        break;
                }
-               if (!isprint(*(pptr + idx))) {
+               if (!isprint(EXTRACT_U_1(pptr + idx))) {
                        /* not part of a command token or response code */
                        return (0);
                }
@@ -710,7 +695,7 @@ fetch_token(netdissect_options *ndo, const u_char *pptr, u_int idx, u_int len,
                        /* no room for this character and terminating '\0' */
                        return (0);
                }
-               tbuf[toklen] = *(pptr + idx);
+               tbuf[toklen] = EXTRACT_U_1(pptr + idx);
                toklen++;
        }
        if (toklen == 0) {
@@ -724,19 +709,19 @@ fetch_token(netdissect_options *ndo, const u_char *pptr, u_int idx, u_int len,
         * an end-of-line (CR or LF).
         */
        for (; idx < len; idx++) {
-               if (!ND_TTEST(*(pptr + idx))) {
+               if (!ND_TTEST_1(pptr + idx)) {
                        /* ran past end of captured data */
                        break;
                }
-               if (*(pptr + idx) == '\r' || *(pptr + idx) == '\n') {
+               if (EXTRACT_U_1(pptr + idx) == '\r' || EXTRACT_U_1(pptr + idx) == '\n') {
                        /* end of line */
                        break;
                }
-               if (!isascii(*(pptr + idx)) || !isprint(*(pptr + idx))) {
+               if (!isascii(EXTRACT_U_1(pptr + idx)) || !isprint(EXTRACT_U_1(pptr + idx))) {
                        /* not a printable ASCII character */
                        break;
                }
-               if (!isspace(*(pptr + idx))) {
+               if (!isspace(EXTRACT_U_1(pptr + idx))) {
                        /* beginning of next token */
                        break;
                }
@@ -759,8 +744,8 @@ print_txt_line(netdissect_options *ndo, const char *protoname,
 
        startidx = idx;
        while (idx < len) {
-               ND_TCHECK(*(pptr+idx));
-               if (*(pptr+idx) == '\n') {
+               ND_TCHECK_1(pptr + idx);
+               if (EXTRACT_U_1(pptr + idx) == '\n') {
                        /*
                         * LF without CR; end of line.
                         * Skip the LF and print the line, with the
@@ -769,14 +754,14 @@ print_txt_line(netdissect_options *ndo, const char *protoname,
                        linelen = idx - startidx;
                        idx++;
                        goto print;
-               } else if (*(pptr+idx) == '\r') {
+               } else if (EXTRACT_U_1(pptr + idx) == '\r') {
                        /* CR - any LF? */
                        if ((idx+1) >= len) {
                                /* not in this packet */
                                return (0);
                        }
-                       ND_TCHECK(*(pptr+idx+1));
-                       if (*(pptr+idx+1) == '\n') {
+                       ND_TCHECK_1(pptr + idx + 1);
+                       if (EXTRACT_U_1(pptr + idx + 1) == '\n') {
                                /*
                                 * CR-LF; end of line.
                                 * Skip the CR-LF and print the line, with
@@ -793,8 +778,9 @@ print_txt_line(netdissect_options *ndo, const char *protoname,
                         * it.
                         */
                        return (0);
-               } else if (!isascii(*(pptr+idx)) ||
-                   (!isprint(*(pptr+idx)) && *(pptr+idx) != '\t')) {
+               } else if (!isascii(EXTRACT_U_1(pptr + idx)) ||
+                          (!isprint(EXTRACT_U_1(pptr + idx)) &&
+                           EXTRACT_U_1(pptr + idx) != '\t')) {
                        /*
                         * Not a printable ASCII character and not a tab;
                         * treat this as if it were binary data, and
@@ -811,12 +797,12 @@ print_txt_line(netdissect_options *ndo, const char *protoname,
         */
 trunc:
        linelen = idx - startidx;
-       ND_PRINT((ndo, "%s%.*s[!%s]", prefix, (int)linelen, pptr + startidx,
-           protoname));
+       ND_PRINT("%s%.*s[!%s]", prefix, (int)linelen, pptr + startidx,
+           protoname);
        return (0);
 
 print:
-       ND_PRINT((ndo, "%s%.*s", prefix, (int)linelen, pptr + startidx));
+       ND_PRINT("%s%.*s", prefix, (int)linelen, pptr + startidx);
        return (idx);
 }
 
@@ -895,7 +881,7 @@ txtproto_print(netdissect_options *ndo, const u_char *pptr, u_int len,
 
        /* Capitalize the protocol name */
        for (pnp = protoname; *pnp != '\0'; pnp++)
-               ND_PRINT((ndo, "%c", toupper((u_char)*pnp)));
+               ND_PRINT("%c", toupper((u_char)*pnp));
 
        if (print_this) {
                /*
@@ -912,7 +898,7 @@ txtproto_print(netdissect_options *ndo, const u_char *pptr, u_int len,
                         * request or response; just print the length
                         * on the first line of the output.
                         */
-                       ND_PRINT((ndo, ", length: %u", len));
+                       ND_PRINT(", length: %u", len);
                        for (idx = 0;
                            idx < len && (eol = print_txt_line(ndo, protoname, "\n\t", pptr, idx, len)) != 0;
                            idx = eol)
@@ -926,26 +912,6 @@ txtproto_print(netdissect_options *ndo, const u_char *pptr, u_int len,
        }
 }
 
-void
-safeputs(netdissect_options *ndo,
-         const u_char *s, const u_int maxlen)
-{
-       u_int idx = 0;
-
-       while (idx < maxlen && *s) {
-               safeputchar(ndo, *s);
-               idx++;
-               s++;
-       }
-}
-
-void
-safeputchar(netdissect_options *ndo,
-            const u_char c)
-{
-       ND_PRINT((ndo, (c < 0x80 && ND_ISPRINT(c)) ? "%c" : "\\0x%02x", c));
-}
-
 #if (defined(__i386__) || defined(_M_IX86) || defined(__X86__) || defined(__x86_64__) || defined(_M_X64)) || \
     (defined(__arm__) || defined(_M_ARM) || defined(__aarch64__)) || \
     (defined(__m68k__) && (!defined(__mc68000__) && !defined(__mc68010__))) || \