]> The Tcpdump Group git mirrors - tcpdump/blobdiff - util.c
Update WinDump.dsp
[tcpdump] / util.c
diff --git a/util.c b/util.c
index 5b92b47438ef2e9b069cc61add82b0f71302bc70..13c87225593cd391dee0a7bcba389a1126788c2e 100644 (file)
--- a/util.c
+++ b/util.c
@@ -19,6 +19,7 @@
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -31,7 +32,6 @@
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
-#include <pcap.h>
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdlib.h>
 
 #include "interface.h"
 
-char * ts_format(register int, register int);
-
 /*
  * Print out a null-terminated filename (or other ascii string).
  * If ep is NULL, assume no truncation check is needed.
  * Return true if truncated.
  */
 int
-fn_print(register const u_char *s, register const u_char *ep)
+fn_print(netdissect_options *ndo,
+         register const u_char *s, register const u_char *ep)
 {
        register int ret;
        register u_char c;
@@ -59,16 +58,15 @@ fn_print(register const u_char *s, register const u_char *ep)
                        ret = 0;
                        break;
                }
-               if (!isascii(c)) {
-                       c = toascii(c);
-                       putchar('M');
-                       putchar('-');
+               if (!ND_ISASCII(c)) {
+                       c = ND_TOASCII(c);
+                       ND_PRINT((ndo, "M-"));
                }
-               if (!isprint(c)) {
+               if (!ND_ISPRINT(c)) {
                        c ^= 0x40;      /* DEL to ?, others to alpha */
-                       putchar('^');
+                       ND_PRINT((ndo, "^"));
                }
-               putchar(c);
+               ND_PRINT((ndo, "%c", c));
        }
        return(ret);
 }
@@ -79,24 +77,23 @@ fn_print(register const u_char *s, register const u_char *ep)
  * Return true if truncated.
  */
 int
-fn_printn(register const u_char *s, register u_int n,
-         register const u_char *ep)
+fn_printn(netdissect_options *ndo,
+          register const u_char *s, register u_int n, register const u_char *ep)
 {
        register u_char c;
 
        while (n > 0 && (ep == NULL || s < ep)) {
                n--;
                c = *s++;
-               if (!isascii(c)) {
-                       c = toascii(c);
-                       putchar('M');
-                       putchar('-');
+               if (!ND_ISASCII(c)) {
+                       c = ND_TOASCII(c);
+                       ND_PRINT((ndo, "M-"));
                }
-               if (!isprint(c)) {
+               if (!ND_ISPRINT(c)) {
                        c ^= 0x40;      /* DEL to ?, others to alpha */
-                       putchar('^');
+                       ND_PRINT((ndo, "^"));
                }
-               putchar(c);
+               ND_PRINT((ndo, "%c", c));
        }
        return (n == 0) ? 0 : 1;
 }
@@ -107,8 +104,9 @@ fn_printn(register const u_char *s, register u_int n,
  * Return true if truncated.
  */
 int
-fn_printzp(register const u_char *s, register u_int n,
-         register const u_char *ep)
+fn_printzp(netdissect_options *ndo,
+           register const u_char *s, register u_int n,
+           register const u_char *ep)
 {
        register int ret;
        register u_char c;
@@ -121,16 +119,15 @@ fn_printzp(register const u_char *s, register u_int n,
                        ret = 0;
                        break;
                }
-               if (!isascii(c)) {
-                       c = toascii(c);
-                       putchar('M');
-                       putchar('-');
+               if (!ND_ISASCII(c)) {
+                       c = ND_TOASCII(c);
+                       ND_PRINT((ndo, "M-"));
                }
-               if (!isprint(c)) {
+               if (!ND_ISPRINT(c)) {
                        c ^= 0x40;      /* DEL to ?, others to alpha */
-                       putchar('^');
+                       ND_PRINT((ndo, "^"));
                }
-               putchar(c);
+               ND_PRINT((ndo, "%c", c));
        }
        return (n == 0) ? 0 : ret;
 }
@@ -138,7 +135,7 @@ fn_printzp(register const u_char *s, register u_int n,
 /*
  * Format the timestamp
  */
-char *
+static char *
 ts_format(register int sec, register int usec)
 {
         static char buf[sizeof("00:00:00.000000")];
@@ -152,7 +149,8 @@ ts_format(register int sec, register int usec)
  * Print the timestamp
  */
 void
-ts_print(register const struct timeval *tvp)
+ts_print(netdissect_options *ndo,
+         register const struct timeval *tvp)
 {
        register int s;
        struct tm *tm;
@@ -162,20 +160,20 @@ ts_print(register const struct timeval *tvp)
        int d_usec;
        int d_sec;
 
-       switch (tflag) {
+       switch (ndo->ndo_tflag) {
 
        case 0: /* Default */
                s = (tvp->tv_sec + thiszone) % 86400;
-                (void)printf("%s ", ts_format(s, tvp->tv_usec));
+               ND_PRINT((ndo, "%s ", ts_format(s, tvp->tv_usec)));
                break;
 
        case 1: /* No time stamp */
                break;
 
        case 2: /* Unix timeval style */
-               (void)printf("%u.%06u ",
+               ND_PRINT((ndo, "%u.%06u ",
                             (unsigned)tvp->tv_sec,
-                            (unsigned)tvp->tv_usec);
+                            (unsigned)tvp->tv_usec));
                break;
 
        case 3: /* Microseconds since previous packet */
@@ -194,9 +192,9 @@ ts_print(register const struct timeval *tvp)
                     d_sec--;
                 }
 
-                (void)printf("%s ", ts_format(d_sec, d_usec));
+                ND_PRINT((ndo, "%s ", ts_format(d_sec, d_usec)));
 
-                if (tflag == 3) { /* set timestamp for last packet */
+                if (ndo->ndo_tflag == 3) { /* set timestamp for last packet */
                     b_sec = tvp->tv_sec;
                     b_usec = tvp->tv_usec;
                 }
@@ -207,11 +205,11 @@ ts_print(register const struct timeval *tvp)
                Time = (tvp->tv_sec + thiszone) - s;
                tm = gmtime (&Time);
                if (!tm)
-                       printf("Date fail  ");
+                       ND_PRINT((ndo, "Date fail  "));
                else
-                       printf("%04d-%02d-%02d %s ",
+                       ND_PRINT((ndo, "%04d-%02d-%02d %s ",
                                tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
-                               ts_format(s, tvp->tv_usec));
+                               ts_format(s, tvp->tv_usec)));
                break;
        }
 }
@@ -222,7 +220,8 @@ ts_print(register const struct timeval *tvp)
  * is represented as 1y1w1d1h1m1s.
  */
 void
-relts_print(int secs)
+relts_print(netdissect_options *ndo,
+            int secs)
 {
        static const char *lengths[] = {"y", "w", "d", "h", "m", "s"};
        static const int seconds[] = {31536000, 604800, 86400, 3600, 60, 1};
@@ -230,16 +229,16 @@ relts_print(int secs)
        const int *s = seconds;
 
        if (secs == 0) {
-               (void)printf("0s");
+               ND_PRINT((ndo, "0s"));
                return;
        }
        if (secs < 0) {
-               (void)printf("-");
+               ND_PRINT((ndo, "-"));
                secs = -secs;
        }
        while (secs > 0) {
                if (secs >= *s) {
-                       (void)printf("%d%s", secs / *s, *l);
+                       ND_PRINT((ndo, "%d%s", secs / *s, *l));
                        secs -= (secs / *s) * *s;
                }
                s++;
@@ -261,8 +260,8 @@ print_unknown_data(netdissect_options *ndo, const u_char *cp,const char *ident,i
                    ident));
                return(0);
        }
-       if (snapend - cp < len)
-               len = snapend - cp;
+       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));
@@ -277,7 +276,7 @@ print_unknown_data(netdissect_options *ndo, const u_char *cp,const char *ident,i
  */
 const char *
 tok2strbuf(register const struct tok *lp, register const char *fmt,
-          register int v, char *buf, size_t bufsize)
+          register u_int v, char *buf, size_t bufsize)
 {
        if (lp != NULL) {
                while (lp->s != NULL) {
@@ -348,7 +347,7 @@ bittok2str_internal(register const struct tok *lp, register const char *fmt,
         }
 
         if (buflen != 0) { /* did we find anything */
-            /* yep, set the the trailing zero 2 bytes before to eliminate the last comma & whitespace */
+            /* yep, set the trailing zero 2 bytes before to eliminate the last comma & whitespace */
             buf[buflen-2] = '\0';
             return (buf);
         }
@@ -410,9 +409,9 @@ tok2strary_internal(register const char **lp, int n, register const char *fmt,
  */
 
 int
-mask2plen(u_int32_t mask)
+mask2plen(uint32_t mask)
 {
-       u_int32_t bitmasks[33] = {
+       uint32_t bitmasks[33] = {
                0x00000000,
                0x80000000, 0xc0000000, 0xe0000000, 0xf0000000,
                0xf8000000, 0xfc000000, 0xfe000000, 0xff000000,
@@ -579,31 +578,28 @@ read_infile(char *fname)
 }
 
 void
-safeputs(const char *s, int maxlen)
+safeputs(netdissect_options *ndo,
+         const u_char *s, const u_int maxlen)
 {
-       int idx = 0;
+       u_int idx = 0;
 
        while (*s && idx < maxlen) {
-               safeputchar(*s);
-                idx++;
+               safeputchar(ndo, *s);
+               idx++;
                s++;
        }
 }
 
 void
-safeputchar(int c)
+safeputchar(netdissect_options *ndo,
+            const u_char c)
 {
-       unsigned char ch;
-
-       ch = (unsigned char)(c & 0xff);
-       if (ch < 0x80 && isprint(ch))
-               printf("%c", ch);
-       else
-               printf("\\0x%02x", ch);
+       ND_PRINT((ndo, (c < 0x80 && ND_ISPRINT(c)) ? "%c" : "\\0x%02x", c));
 }
 
+#ifdef LBL_ALIGN
 /*
- * some compiler tries to optimize memcpy(), using the alignment constraint
+ * Some compilers try to optimize memcpy(), using the alignment constraint
  * on the argument pointer type.  by using this function, we try to avoid the
  * optimization.
  */
@@ -619,4 +615,4 @@ unaligned_memcmp(const void *p, const void *q, size_t l)
 {
        return (memcmp(p, q, l));
 }
-
+#endif