]> The Tcpdump Group git mirrors - tcpdump/blobdiff - tcpdump.c
C compilers can, and some do, optimize away pointer underflow checks.
[tcpdump] / tcpdump.c
index 5b66ece81d2c6f33c8cadac19c1acd0b0426ba59..88295d84c69e94efc64f8f9cab1f562e71d03fbf 100644 (file)
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -1487,24 +1487,27 @@ info(register int verbose)
        if (!verbose)
                fprintf(stderr, "%s: ", program_name);
 
        if (!verbose)
                fprintf(stderr, "%s: ", program_name);
 
-       (void)fprintf(stderr, "%u packets captured", packets_captured);
+       (void)fprintf(stderr, "%u packet%s captured", packets_captured,
+           PLURAL_SUFFIX(packets_captured));
        if (!verbose)
                fputs(", ", stderr);
        else
                putc('\n', stderr);
        if (!verbose)
                fputs(", ", stderr);
        else
                putc('\n', stderr);
-       (void)fprintf(stderr, "%u packets received by filter", stat.ps_recv);
+       (void)fprintf(stderr, "%u packet%s received by filter", stat.ps_recv,
+           PLURAL_SUFFIX(stat.ps_recv));
        if (!verbose)
                fputs(", ", stderr);
        else
                putc('\n', stderr);
        if (!verbose)
                fputs(", ", stderr);
        else
                putc('\n', stderr);
-       (void)fprintf(stderr, "%u packets dropped by kernel", stat.ps_drop);
+       (void)fprintf(stderr, "%u packet%s dropped by kernel", stat.ps_drop,
+           PLURAL_SUFFIX(stat.ps_drop));
        if (stat.ps_ifdrop != 0) {
                if (!verbose)
                        fputs(", ", stderr);
                else
                        putc('\n', stderr);
        if (stat.ps_ifdrop != 0) {
                if (!verbose)
                        fputs(", ", stderr);
                else
                        putc('\n', stderr);
-               (void)fprintf(stderr, "%u packets dropped by interface\n",
-                   stat.ps_ifdrop);
+               (void)fprintf(stderr, "%u packet%s dropped by interface\n",
+                   stat.ps_ifdrop, PLURAL_SUFFIX(stat.ps_ifdrop));
        } else
                putc('\n', stderr);
        infoprint = 0;
        } else
                putc('\n', stderr);
        infoprint = 0;
@@ -1717,6 +1720,11 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
                 hdrlen = (*print_info->p.printer)(h, sp);
         }
                 
                 hdrlen = (*print_info->p.printer)(h, sp);
         }
                 
+       /*
+        * Restore the original snapend, as a printer might have
+        * changed it.
+        */
+       snapend = sp + h->caplen;
        if (Xflag) {
                /*
                 * Print the raw packet data in hex and ASCII.
        if (Xflag) {
                /*
                 * Print the raw packet data in hex and ASCII.