]> The Tcpdump Group git mirrors - tcpdump/blobdiff - tcpdump.c
Merge pull request #916 from stevekay/master
[tcpdump] / tcpdump.c
index 0bde64682edd31e3d966626ad92f8c01922bf2ed..2efb549b5226faf7b8d9b2462dfe267f8d48af8d 100644 (file)
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -419,15 +419,15 @@ show_tstamp_types_and_exit(pcap_t *pc, const char *device)
                    device);
                exit_tcpdump(S_SUCCESS);
        }
-       fprintf(stderr, "Time stamp types for %s (use option -j to set):\n",
+       fprintf(stdout, "Time stamp types for %s (use option -j to set):\n",
            device);
        for (i = 0; i < n_tstamp_types; i++) {
                tstamp_type_name = pcap_tstamp_type_val_to_name(tstamp_types[i]);
                if (tstamp_type_name != NULL) {
-                       (void) fprintf(stderr, "  %s (%s)\n", tstamp_type_name,
+                       (void) fprintf(stdout, "  %s (%s)\n", tstamp_type_name,
                            pcap_tstamp_type_val_to_description(tstamp_types[i]));
                } else {
-                       (void) fprintf(stderr, "  %d\n", tstamp_types[i]);
+                       (void) fprintf(stdout, "  %d\n", tstamp_types[i]);
                }
        }
        pcap_free_tstamp_types(tstamp_types);
@@ -456,28 +456,30 @@ show_dlts_and_exit(pcap_t *pc, const char *device)
         * monitor mode might be different from the ones available when
         * not in monitor mode).
         */
+       (void) fprintf(stdout, "Data link types for ");
        if (supports_monitor_mode)
-               (void) fprintf(stderr, "Data link types for %s %s (use option -y to set):\n",
+               (void) fprintf(stdout, "%s %s",
                    device,
                    Iflag ? "when in monitor mode" : "when not in monitor mode");
        else
-               (void) fprintf(stderr, "Data link types for %s (use option -y to set):\n",
+               (void) fprintf(stdout, "%s",
                    device);
+       (void) fprintf(stdout, " (use option -y to set):\n");
 
        for (i = 0; i < n_dlts; i++) {
                dlt_name = pcap_datalink_val_to_name(dlts[i]);
                if (dlt_name != NULL) {
-                       (void) fprintf(stderr, "  %s (%s)", dlt_name,
+                       (void) fprintf(stdout, "  %s (%s)", dlt_name,
                            pcap_datalink_val_to_description(dlts[i]));
 
                        /*
                         * OK, does tcpdump handle that type?
                         */
                        if (!has_printer(dlts[i]))
-                               (void) fprintf(stderr, " (printing not supported)");
-                       fprintf(stderr, "\n");
+                               (void) fprintf(stdout, " (printing not supported)");
+                       fprintf(stdout, "\n");
                } else {
-                       (void) fprintf(stderr, "  DLT %d (printing not supported)\n",
+                       (void) fprintf(stdout, "  DLT %d (printing not supported)\n",
                            dlts[i]);
                }
        }
@@ -1482,6 +1484,7 @@ main(int argc, char **argv)
        int yflag_dlt = -1;
        const char *yflag_dlt_name = NULL;
        int print = 0;
+       long Cflagmult = 1000000;
 
        netdissect_options Ndo;
        netdissect_options *ndo = &Ndo;
@@ -1558,6 +1561,18 @@ main(int argc, char **argv)
 
                case 'C':
                        errno = 0;
+                       if (optarg[strlen(optarg)-1] == 'k') {
+                               Cflagmult = 1024;
+                               optarg[strlen(optarg)-1] = '\0';
+                       }
+                       if (optarg[strlen(optarg)-1] == 'm') {
+                               Cflagmult = 1024*1024;
+                               optarg[strlen(optarg)-1] = '\0';
+                       }
+                       if (optarg[strlen(optarg)-1] == 'g') {
+                               Cflagmult = 1024*1024*1024;
+                               optarg[strlen(optarg)-1] = '\0';
+                       }
 #ifdef HAVE_PCAP_DUMP_FTELL64
                        Cflag = strtoint64_t(optarg, &endp, 10);
 #else
@@ -1567,15 +1582,15 @@ main(int argc, char **argv)
                            || Cflag <= 0)
                                error("invalid file size %s", optarg);
                        /*
-                        * Will multiplying it by 1000000 overflow?
+                        * Will multiplying it by multiplier overflow?
                         */
 #ifdef HAVE_PCAP_DUMP_FTELL64
-                       if (Cflag > INT64_T_CONSTANT(0x7fffffffffffffff) / 1000000)
+                       if (Cflag > INT64_T_CONSTANT(0x7fffffffffffffff) / Cflagmult)
 #else
-                       if (Cflag > LONG_MAX / 1000000)
+                       if (Cflag > LONG_MAX / Cflagmult)
 #endif
                                error("file size %s is too large", optarg);
-                       Cflag *= 1000000;
+                       Cflag *= Cflagmult;
                        break;
 
                case 'd':