Regularize indentation a bit.
[obnox/wireshark/wip.git] / tshark.c
index 33cbb103d147090f8d35e84d46a29fc6ec316463..553388121908b4ea32e7dd0267d66b16107a2b90 100644 (file)
--- a/tshark.c
+++ b/tshark.c
@@ -77,6 +77,7 @@
 #include <epan/addr_resolv.h>
 #include "util.h"
 #include "clopts_common.h"
+#include "console_io.h"
 #include "cmdarg_err.h"
 #include "version_info.h"
 #include <epan/plugins.h>
@@ -237,7 +238,7 @@ print_usage(gboolean print_ver)
   fprintf(output, "  -I                       capture in monitor mode, if available\n");
 #endif
 #if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
-  fprintf(output, "  -B <buffer size>         size of kernel buffer (def: platform-dependent)\n");
+  fprintf(output, "  -B <buffer size>         size of kernel buffer (def: 1MB)\n");
 #endif
   fprintf(output, "  -y <link type>           link layer type (def: first appropriate)\n");
   fprintf(output, "  -D                       print list of interfaces and exit\n");
@@ -756,6 +757,8 @@ main(int argc, char *argv[])
   gboolean             list_link_layer_types = FALSE;
   gboolean             start_capture = FALSE;
   int                  status;
+  GList               *if_list;
+  gchar               *err_str;
 #else
   gboolean             capture_option_specified = FALSE;
 #endif
@@ -1045,8 +1048,23 @@ main(int argc, char *argv[])
 #endif
       case 'D':        /* Print a list of capture devices and exit */
 #ifdef HAVE_LIBPCAP
-        status = capture_opts_list_interfaces(FALSE);
-        exit(status);
+        if_list = capture_interface_list(&err, &err_str);
+        if (if_list == NULL) {
+          switch (err) {
+          case CANT_GET_INTERFACE_LIST:
+            cmdarg_err("%s", err_str);
+            g_free(err_str);
+            break;
+
+          case NO_INTERFACES_FOUND:
+            cmdarg_err("There are no interfaces on which a capture can be done");
+            break;
+          }
+          exit(2);
+        }
+        capture_opts_print_interfaces(if_list);
+        free_interface_list(if_list);
+        exit(0);
 #else
         capture_option_specified = TRUE;
         arg_error = TRUE;
@@ -1622,22 +1640,23 @@ main(int argc, char *argv[])
     /* if requested, list the link layer types and exit */
     if (list_link_layer_types) {
         /* Get the list of link-layer types for the capture device. */
-        GList *lt_list;
-        gchar *err_str;
-
-        lt_list = capture_pcap_linktype_list(global_capture_opts.iface, &err_str);
-        if (lt_list == NULL) {
-            if (err_str != NULL) {
-                cmdarg_err("The list of data link types for the capture device \"%s\" could not be obtained (%s)."
-                 "Please check to make sure you have sufficient permissions, and that\n"
-                 "you have the proper interface or pipe specified.\n", global_capture_opts.iface, err_str);
-                g_free(err_str);
-            } else
-                cmdarg_err("The capture device \"%s\" has no data link types.", global_capture_opts.iface);
+        if_capabilities_t *caps;
+
+        caps = capture_get_if_capabilities(global_capture_opts.iface,
+                                           global_capture_opts.monitor_mode,
+                                           &err_str);
+        if (caps == NULL) {
+            cmdarg_err("%s", err_str);
+            g_free(err_str);
             exit(2);
         }
-        capture_opts_print_link_layer_types(lt_list);
-        free_pcap_linktype_list(lt_list);
+        if (caps->data_link_types == NULL) {
+            cmdarg_err("The capture device \"%s\" has no data link types.", global_capture_opts.iface);
+            exit(2);
+        }
+        capture_opts_print_if_capabilities(caps,
+                                           global_capture_opts.monitor_mode);
+        free_if_capabilities(caps);
         exit(0);
     }
 
@@ -3397,6 +3416,26 @@ write_failure_message(const char *filename, int err)
           filename, strerror(err));
 }
 
+/*
+ * Print to the standard error.  This is a command-line tool, so there's
+ * no need to pop up a console.
+ */
+void
+vfprintf_stderr(const char *fmt, va_list ap)
+{
+  vfprintf(stderr, fmt, ap);
+}
+
+void
+fprintf_stderr(const char *fmt, ...)
+{
+  va_list ap;
+
+  va_start(ap, fmt);
+  vfprintf_stderr(fmt, ap);
+  va_end(ap);
+}
+
 /*
  * Report an error in command-line arguments.
  */