Wrong patch commit in Rev38175...
[obnox/wireshark/wip.git] / tshark.c
index df50bc44f0e29eaa4eae461a40cfa752eaf79c8a..473a6898ec890f43f272873fcf2f93298fd97096 100644 (file)
--- a/tshark.c
+++ b/tshark.c
 # include <sys/stat.h>
 #endif
 
-#ifdef NEED_STRERROR_H
-#include "wsutil/strerror.h"
-#endif
-
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
 #else
@@ -593,7 +589,6 @@ add_decode_as(const gchar *cl_param)
 
   case FT_STRING:
   case FT_STRINGZ:
-  case FT_EBCDIC:
     /* The selector for this table is a string. */
     break;
 
@@ -690,7 +685,6 @@ add_decode_as(const gchar *cl_param)
 
   case FT_STRING:
   case FT_STRINGZ:
-  case FT_EBCDIC:
     /* The selector for this table is a string. */
     dissector_change_string(table_name, selector_str, dissector_matching);
     break;
@@ -814,11 +808,17 @@ main(int argc, char *argv[])
   int                  status;
   GList               *if_list;
   gchar               *err_str;
+  guint                i;
+  interface_options    interface_opts;
 #else
   gboolean             capture_option_specified = FALSE;
 #endif
   gboolean             quiet = FALSE;
+#ifdef PCAP_NG_DEFAULT
+  int                  out_file_type = WTAP_FILE_PCAPNG;
+#else
   int                  out_file_type = WTAP_FILE_PCAP;
+#endif
   gboolean             out_file_name_res = FALSE;
   gchar               *cf_name = NULL, *rfilter = NULL;
 #ifdef HAVE_PCAP_OPEN_DEAD
@@ -1013,21 +1013,21 @@ main(int argc, char *argv[])
   if (gpf_path != NULL) {
     if (gpf_open_errno != 0) {
       cmdarg_err("Can't open global preferences file \"%s\": %s.",
-              pf_path, strerror(gpf_open_errno));
+              pf_path, g_strerror(gpf_open_errno));
     }
     if (gpf_read_errno != 0) {
       cmdarg_err("I/O error reading global preferences file \"%s\": %s.",
-              pf_path, strerror(gpf_read_errno));
+              pf_path, g_strerror(gpf_read_errno));
     }
   }
   if (pf_path != NULL) {
     if (pf_open_errno != 0) {
       cmdarg_err("Can't open your preferences file \"%s\": %s.", pf_path,
-              strerror(pf_open_errno));
+              g_strerror(pf_open_errno));
     }
     if (pf_read_errno != 0) {
       cmdarg_err("I/O error reading your preferences file \"%s\": %s.",
-              pf_path, strerror(pf_read_errno));
+              pf_path, g_strerror(pf_read_errno));
     }
     g_free(pf_path);
     pf_path = NULL;
@@ -1042,11 +1042,11 @@ main(int argc, char *argv[])
   if (gdp_path != NULL) {
     if (gdp_open_errno != 0) {
       cmdarg_err("Could not open global disabled protocols file\n\"%s\": %s.",
-                 gdp_path, strerror(gdp_open_errno));
+                 gdp_path, g_strerror(gdp_open_errno));
     }
     if (gdp_read_errno != 0) {
       cmdarg_err("I/O error reading global disabled protocols file\n\"%s\": %s.",
-                 gdp_path, strerror(gdp_read_errno));
+                 gdp_path, g_strerror(gdp_read_errno));
     }
     g_free(gdp_path);
   }
@@ -1054,12 +1054,12 @@ main(int argc, char *argv[])
     if (dp_open_errno != 0) {
       cmdarg_err(
         "Could not open your disabled protocols file\n\"%s\": %s.", dp_path,
-        strerror(dp_open_errno));
+        g_strerror(dp_open_errno));
     }
     if (dp_read_errno != 0) {
       cmdarg_err(
         "I/O error reading your disabled protocols file\n\"%s\": %s.", dp_path,
-        strerror(dp_read_errno));
+        g_strerror(dp_read_errno));
     }
     g_free(dp_path);
   }
@@ -1261,6 +1261,10 @@ main(int argc, char *argv[])
         timestamp_set_type(TS_DELTA_DIS);
       else if (strcmp(optarg, "e") == 0)
         timestamp_set_type(TS_EPOCH);
+      else if (strcmp(optarg, "u") == 0)
+        timestamp_set_type(TS_UTC);
+      else if (strcmp(optarg, "ud") == 0)
+        timestamp_set_type(TS_UTC_WITH_DATE);
       else {
         cmdarg_err("Invalid time stamp type \"%s\"",
                    optarg);
@@ -1382,18 +1386,30 @@ main(int argc, char *argv[])
     if (cf_name != NULL) {
       if (rfilter != NULL) {
         cmdarg_err("Read filters were specified both with \"-R\" "
-            "and with additional command-line arguments");
+            "and with additional command-line arguments.");
         return 1;
       }
       rfilter = get_args_as_string(argc, argv, optind);
     } else {
 #ifdef HAVE_LIBPCAP
-      if (global_capture_opts.cfilter) {
-        cmdarg_err("Capture filters were specified both with \"-f\""
-            " and with additional command-line arguments");
+      if (global_capture_opts.default_options.cfilter) {
+        cmdarg_err("A default capture filter was specified both with \"-f\""
+            " and with additional command-line arguments.");
         return 1;
       }
-      global_capture_opts.cfilter = get_args_as_string(argc, argv, optind);
+      for (i = 0; i < global_capture_opts.ifaces->len; i++) {
+        interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, i);
+        if (interface_opts.cfilter == NULL) {
+          interface_opts.cfilter = get_args_as_string(argc, argv, optind);
+          global_capture_opts.ifaces = g_array_remove_index(global_capture_opts.ifaces, i);
+          g_array_insert_val(global_capture_opts.ifaces, i, interface_opts);
+        } else {
+          cmdarg_err("A capture filter was specified both with \"-f\""
+              " and with additional command-line arguments.");
+          return 1;
+        }
+      }
+      global_capture_opts.default_options.cfilter = get_args_as_string(argc, argv, optind);
 #else
       capture_option_specified = TRUE;
 #endif
@@ -1439,7 +1455,7 @@ main(int argc, char *argv[])
      support in capture files we read). */
 #ifdef HAVE_LIBPCAP
   if (cf_name != NULL) {
-    if (global_capture_opts.cfilter) {
+    if (global_capture_opts.default_options.cfilter) {
       cmdarg_err("Only read filters, not capture filters, "
           "can be specified when reading a capture file.");
       return 1;
@@ -1525,8 +1541,8 @@ main(int argc, char *argv[])
       if (global_capture_opts.saving_to_file) {
         /* They specified a "-w" flag, so we'll be saving to a capture file. */
 
-        /* When capturing, we only support writing libpcap format. */
-        if (out_file_type != WTAP_FILE_PCAP) {
+        /* When capturing, we only support writing pcap or pcap-ng format. */
+        if (out_file_type != WTAP_FILE_PCAP && out_file_type != WTAP_FILE_PCAPNG) {
           cmdarg_err("Live captures can only be saved in libpcap format.");
           return 1;
         }
@@ -2145,14 +2161,17 @@ capture_input_error_message(capture_options *capture_opts _U_, char *error_msg,
 
 /* capture child detected an capture filter related error */
 void
-capture_input_cfilter_error_message(capture_options *capture_opts, char *error_message)
+capture_input_cfilter_error_message(capture_options *capture_opts, guint i, char *error_message)
 {
   dfilter_t   *rfcode = NULL;
+  interface_options interface_opts;
 
+  g_assert(i < capture_opts->ifaces->len);
+  interface_opts = g_array_index(capture_opts->ifaces, interface_options, i);
 
-  if (dfilter_compile(capture_opts->cfilter, &rfcode) && rfcode != NULL) {
+  if (dfilter_compile(interface_opts.cfilter, &rfcode) && rfcode != NULL) {
     cmdarg_err(
-      "Invalid capture filter: \"%s\"!\n"
+      "Invalid capture filter \"%s\" for interface %s!\n"
       "\n"
       "That string looks like a valid display filter; however, it isn't a valid\n"
       "capture filter (%s).\n"
@@ -2161,15 +2180,15 @@ capture_input_cfilter_error_message(capture_options *capture_opts, char *error_m
       "so you can't use most display filter expressions as capture filters.\n"
       "\n"
       "See the User's Guide for a description of the capture filter syntax.",
-      capture_opts->cfilter, error_message);
+      interface_opts.cfilter, interface_opts.descr, error_message);
     dfilter_free(rfcode);
   } else {
     cmdarg_err(
-      "Invalid capture filter: \"%s\"!\n"
+      "Invalid capture filter \"%s\" for interface %s!\n"
       "\n"
       "That string isn't a valid capture filter (%s).\n"
       "See the User's Guide for a description of the capture filter syntax.",
-      capture_opts->cfilter, error_message);
+      interface_opts.cfilter, interface_opts.descr, error_message);
   }
 }
 
@@ -2621,7 +2640,11 @@ load_cap_file(capture_file *cf, char *save_file, int out_file_type,
   gboolean     filtering_tap_listeners;
   guint        tap_flags;
 
+#ifdef PCAP_NG_DEFAULT
+  linktype = WTAP_ENCAP_PER_PACKET;
+#else
   linktype = wtap_file_encap(cf->wth);
+#endif
   if (save_file != NULL) {
     /* Get a string that describes what we're writing to */
     save_file_string = output_file_description(save_file);
@@ -2646,7 +2669,7 @@ load_cap_file(capture_file *cf, char *save_file, int out_file_type,
       case WTAP_ERR_UNSUPPORTED_ENCAP:
       case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
         cmdarg_err("The capture file being read can't be written in "
-          "that format.");
+          "the format \"%s\".", wtap_encap_short_string(linktype));
         break;
 
       case WTAP_ERR_CANT_OPEN:
@@ -3087,7 +3110,9 @@ print_columns(capture_file *cf)
     case COL_CLS_TIME:
     case COL_REL_TIME:
     case COL_ABS_TIME:
-    case COL_ABS_DATE_TIME: /* XXX - wider */
+    case COL_ABS_DATE_TIME:
+    case COL_UTC_TIME:
+    case COL_UTC_DATE_TIME: /* XXX - wider */
       column_len = strlen(cf->cinfo.col_data[i]);
       if (column_len < 10)
         column_len = 10;
@@ -3497,7 +3522,7 @@ show_print_file_io_error(int err)
 
   default:
     cmdarg_err("An error occurred while printing packets: %s.",
-      strerror(err));
+      g_strerror(err));
     break;
   }
 }
@@ -3640,7 +3665,7 @@ static void
 read_failure_message(const char *filename, int err)
 {
   cmdarg_err("An error occurred while reading from the file \"%s\": %s.",
-          filename, strerror(err));
+          filename, g_strerror(err));
 }
 
 /*
@@ -3650,7 +3675,7 @@ static void
 write_failure_message(const char *filename, int err)
 {
   cmdarg_err("An error occurred while writing to the file \"%s\": %s.",
-          filename, strerror(err));
+          filename, g_strerror(err));
 }
 
 /*