Add an additional DONT_HAVE_PCAP return value from get_interface_list()
authorGuy Harris <guy@alum.mit.edu>
Thu, 29 Dec 2011 22:49:49 +0000 (22:49 -0000)
committerGuy Harris <guy@alum.mit.edu>
Thu, 29 Dec 2011 22:49:49 +0000 (22:49 -0000)
and capture_interface_list().  Return it if, on Windows, we ask for the
interface list but don't have WinPcap installed.  Handle it like
CANT_GET_INTERFACE_LIST.

svn path=/trunk/; revision=40334

capture-wpcap.c
capture_ifinfo.h
capture_opts.c
dumpcap.c
gtk/capture_dlg.c
gtk/capture_if_dlg.c
gtk/main.c
gtk/main_welcome.c
tshark.c

index 9dd7903ddd77fb30189fd4e9e5a75581494e1c9d..f831f225f1d04387d0517d2faefca08c29bbbdb7 100644 (file)
@@ -35,6 +35,8 @@
 #include "capture_ifinfo.h"
 #include "capture-pcap-util.h"
 #include "capture-pcap-util-int.h"
+#include "capture-wpcap.h"
+#include "capture_errs.h"
 
 #include <wsutil/file_util.h>
 
@@ -694,6 +696,16 @@ get_interface_list(int *err, char **err_str)
        int i, j;
        char errbuf[PCAP_ERRBUF_SIZE];
 
+       if (!has_wpcap) {
+               /*
+                * We don't have WinPcap, so we can't get a list of
+                * interfaces.
+                */
+               *err = DONT_HAVE_PCAP;
+               *err_str = cant_load_winpcap_err("you");
+               return NULL;
+       }
+
 #ifdef HAVE_PCAP_FINDALLDEVS
        if (p_pcap_findalldevs != NULL)
                return get_interface_list_findalldevs(err, err_str);
index e96dfb6cfb4bdabbcc6cc4321196fb95aeeffa21..20207aedcf4309aa988133a81ab0acde941da42a 100644 (file)
@@ -64,6 +64,7 @@ extern GList *capture_interface_list(int *err, char **err_str);
 /* Error values from "get_interface_list()/capture_interface_list()". */
 #define        CANT_GET_INTERFACE_LIST 1       /* error getting list */
 #define        NO_INTERFACES_FOUND     2       /* list is empty */
+#define        DONT_HAVE_PCAP          3       /* couldn't load WinPcap */
 
 void free_interface_list(GList *if_list);
 
index 8f7325e1ea47a10c87934478fe16a382001c6a04..f200be3735b608b300e8087170deee0d16c02ce8 100644 (file)
@@ -471,6 +471,7 @@ capture_opts_add_iface_opt(capture_options *capture_opts, const char *optarg_str
             switch (err) {
 
             case CANT_GET_INTERFACE_LIST:
+            case DONT_HAVE_PCAP:
                 cmdarg_err("%s", err_str);
                 g_free(err_str);
                 break;
@@ -842,6 +843,7 @@ gboolean capture_opts_trim_iface(capture_options *capture_opts, const char *capt
                 switch (err) {
 
                 case CANT_GET_INTERFACE_LIST:
+                case DONT_HAVE_PCAP:
                     cmdarg_err("%s", err_str);
                     g_free(err_str);
                     break;
index b035185f9bf88ed3de7c0c36c3e234cfd99d5500..cdc3aabb560109a33b90a1fc3ea51fb13ee9ac74 100644 (file)
--- a/dumpcap.c
+++ b/dumpcap.c
@@ -1301,6 +1301,7 @@ print_statistics_loop(gboolean machine_readable)
     if (if_list == NULL) {
         switch (err) {
         case CANT_GET_INTERFACE_LIST:
+        case DONT_HAVE_PCAP:
             cmdarg_err("%s", err_str);
             g_free(err_str);
             break;
@@ -4207,6 +4208,7 @@ main(int argc, char *argv[])
         if (if_list == NULL) {
             switch (err) {
             case CANT_GET_INTERFACE_LIST:
+            case DONT_HAVE_PCAP:
                 cmdarg_err("%s", err_str);
                 g_free(err_str);
                 exit_main(2);
index 96fa94d6091dc6f71384c9bf401dd6cb11411738..27b1db24e5c3af24f7c8a0aedacf7674413b01ec 100644 (file)
@@ -1068,7 +1068,8 @@ update_interface_list(void)
     g_object_set_data(G_OBJECT(cap_open_w), E_CAP_IF_LIST_KEY, NULL);
   }
 
-  if (if_list == NULL && err == CANT_GET_INTERFACE_LIST) {
+  if (if_list == NULL &&
+      (err == CANT_GET_INTERFACE_LIST || err == DONT_HAVE_PCAP)) {
     gpointer dialog = simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
     g_free(err_str);
 
@@ -2765,7 +2766,8 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
 
   if_list = capture_interface_list(&err, &err_str);
 
-  if (if_list == NULL && err == CANT_GET_INTERFACE_LIST) {
+  if (if_list == NULL &&
+      (err == CANT_GET_INTERFACE_LIST || err == DONT_HAVE_PCAP)) {
     simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
     g_free(err_str);
   }
@@ -3727,7 +3729,8 @@ make_and_fill_rows(void)
   /* Scan through the list and build a list of strings to display. */
   if_list = capture_interface_list(&err, &err_str);
   if_list = g_list_sort (if_list, if_list_comparator_alph);
-  if (if_list == NULL && err == CANT_GET_INTERFACE_LIST) {
+  if (if_list == NULL &&
+      (err == CANT_GET_INTERFACE_LIST || err == DONT_HAVE_PCAP)) {
     simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
     g_free(err_str);
     return;
index 08c13291100ed024b1b6f2c5e820e7b1622193f7..48169ac5d8bc84ff60da324e92bb3ce3a8ce5a92 100644 (file)
@@ -763,6 +763,7 @@ capture_if_cb(GtkWidget *w _U_, gpointer d _U_)
     switch (err) {
 
     case CANT_GET_INTERFACE_LIST:
+    case DONT_HAVE_PCAP:
       simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
       g_free(err_str);
       break;
index de8c562a86b9366d11922df801bfc6bc8bf645f5..9a7e970773df26efe65a60d38143898cde9f38b8 100644 (file)
@@ -2207,6 +2207,7 @@ main(int argc, char *argv[])
         if (if_list == NULL) {
           switch (err) {
           case CANT_GET_INTERFACE_LIST:
+          case DONT_HAVE_PCAP:
             cmdarg_err("%s", err_str);
             g_free(err_str);
             break;
index 40d27a1f0be752bbe48b29be3b7359c23fd9ae71..cd3fd97a3a194a837ce6496baf0e63d564a1466c 100644 (file)
@@ -971,7 +971,8 @@ welcome_if_tree_load(void)
         interfaces = g_array_new(TRUE, TRUE, sizeof(displayed_interface));
         if_list = capture_interface_list(&err, &err_str);
         if_list = g_list_sort (if_list, if_list_comparator_alph);
-        if (if_list == NULL && err == CANT_GET_INTERFACE_LIST) {
+        if (if_list == NULL &&
+            (err == CANT_GET_INTERFACE_LIST || err == DONT_HAVE_PCAP)) {
             simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
             g_free(err_str);
             return;
index e1b11cef6fe33ef2ad9be436312f07080c2ebdb0..2da455d9a166d9aabde7fb5116744c7439dcf260 100644 (file)
--- a/tshark.c
+++ b/tshark.c
@@ -1138,6 +1138,7 @@ main(int argc, char *argv[])
       if (if_list == NULL) {
         switch (err) {
         case CANT_GET_INTERFACE_LIST:
+        case DONT_HAVE_PCAP:
           cmdarg_err("%s", err_str);
           g_free(err_str);
           break;