]> The Tcpdump Group git mirrors - tcpdump/blobdiff - util.c
Small fix to reflect the change in the ip6_misc.h file of libpcap
[tcpdump] / util.c
diff --git a/util.c b/util.c
index fb849c6f68186f8a73528f81b186fd4bb675ac2f..e8515f18dadb878ac33e8e1c43cc53c5edf10e0b 100644 (file)
--- a/util.c
+++ b/util.c
 
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/util.c,v 1.72 2001-10-08 16:12:13 fenner Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/util.c,v 1.78 2002-08-02 04:22:11 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/file.h>
+#include <tcpdump-stdinc.h>
+
 #include <sys/stat.h>
 
-#include <ctype.h>
 #include <errno.h>
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
@@ -46,7 +44,6 @@ static const char rcsid[] =
 #ifdef TIME_WITH_SYS_TIME
 #include <time.h>
 #endif
-#include <unistd.h>
 
 #include "interface.h"
 
@@ -145,7 +142,7 @@ ts_print(register const struct timeval *tvp)
                } else {
                        int d_usec = tvp->tv_usec - b_usec;
                        int d_sec = tvp->tv_sec - b_sec;
-                       
+
                        while (d_usec < 0) {
                                d_usec += 1000000;
                                d_sec--;
@@ -201,6 +198,34 @@ relts_print(int secs)
        }
 }
 
+/*
+ *  this is a generic routine for printing unknown data;
+ *  we pass on the linefeed plus indentation string to
+ *  get a proper output - returns 0 on error
+ */
+
+int
+print_unknown_data(const u_char *cp,const char *lf,int len)
+{
+        int i;
+
+       printf("%s0x0000: ",lf);
+       for(i=0;i<len;i++) {
+           if (!TTEST2(*(cp+i), 1)) {
+              printf("%spacket exceeded snapshot",lf);
+              return(0);
+            }
+           printf("%02x",*(cp+i));
+           if (i%2)
+               printf(" ");
+           if (i/16!=(i+1)/16) {
+               if (i<(len-1))
+                   printf("%s0x%04x: ",lf,i);
+           }
+       }
+       return(1); /* everything is ok */
+}
+
 /*
  * Convert a token value to a string; use "fmt" if not found.
  */
@@ -333,7 +358,16 @@ read_infile(char *fname)
        if (cc < 0)
                error("read %s: %s", fname, pcap_strerror(errno));
        if (cc != buf.st_size)
+#ifndef WIN32
                error("short read %s (%d != %d)", fname, cc, (int)buf.st_size);
+#else
+/* Windows seems not to like the final \xa character */
+       {
+               char *pdest;
+               pdest=strchr( cp, '\xa');
+               *pdest=0;
+       }
+#endif /* WIN32 */
        cp[(int)buf.st_size] = '\0';
 
        return (cp);
@@ -354,8 +388,8 @@ safeputchar(int c)
        unsigned char ch;
 
        ch = (unsigned char)(c & 0xff);
-       if (c < 0x80 && isprint(c))
-               printf("%c", c & 0xff);
+       if (ch < 0x80 && isprint(ch))
+               printf("%c", ch);
        else
-               printf("\\%03o", c & 0xff);
+               printf("\\%03o", ch);
 }