remove all calls to exit() from the capture_opts.c and replace them by status return...
authorulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 10 Feb 2006 02:05:30 +0000 (02:05 +0000)
committerulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 10 Feb 2006 02:05:30 +0000 (02:05 +0000)
This way makes it much easier to debug, e.g. to set a common breakpoint if a command line parameter fails.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@17240 f5534014-38df-0310-8fa8-9805f1628bb7

capture_opts.c
capture_opts.h
dumpcap.c
gtk/main.c
tethereal.c

index 08f023e70561948bf2c8e798ee167927c6c23e64..6c451458a17d58f555614217d9e4ecbe9643c516 100644 (file)
@@ -48,7 +48,7 @@
 #include <wiretap/file_util.h>
 
 
-static gboolean capture_opts_output_to_pipe(const char *save_file);
+static gboolean capture_opts_output_to_pipe(const char *save_file, gboolean *is_pipe);
 
 
 void
@@ -292,7 +292,7 @@ get_pipe_arguments(capture_options *capture_opts, const char *arg)
 #endif
 
 
-void
+static int
 capture_opts_add_iface_opt(capture_options *capture_opts, const char *optarg)
 {
     long        adapter_index;
@@ -316,16 +316,16 @@ capture_opts_add_iface_opt(capture_options *capture_opts, const char *optarg)
     if (p != NULL && *p == '\0') {
       if (adapter_index < 0) {
         cmdarg_err("The specified adapter index is a negative number");
-       exit(1);
+        return 1;
       }
       if (adapter_index > INT_MAX) {
         cmdarg_err("The specified adapter index is too large (greater than %d)",
             INT_MAX);
-        exit(1);
+        return 1;
       }
       if (adapter_index == 0) {
         cmdarg_err("there is no interface with that adapter index");
-        exit(1);
+        return 1;
       }
       if_list = get_interface_list(&err, err_str);
       if (if_list == NULL) {
@@ -342,35 +342,39 @@ capture_opts_add_iface_opt(capture_options *capture_opts, const char *optarg)
             cmdarg_err("There are no interfaces on which a capture can be done");
             break;
         }
-        exit(2);
+        return 2;
       }
       if_info = g_list_nth_data(if_list, adapter_index - 1);
       if (if_info == NULL) {
         cmdarg_err("there is no interface with that adapter index");
-        exit(1);
+        return 1;
       }
       capture_opts->iface = g_strdup(if_info->name);
       free_interface_list(if_list);
     } else {
       capture_opts->iface = g_strdup(optarg);
     }
+
+    return 0;
 }
 
-void
+int
 capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg, gboolean *start_capture)
 {
+    int status;
+
     switch(opt) {
     case 'a':        /* autostop criteria */
         if (set_autostop_criterion(capture_opts, optarg) == FALSE) {
           cmdarg_err("Invalid or unknown -a flag \"%s\"", optarg);
-          exit(1);
+          return 1;
         }
         break;
     case 'b':        /* Ringbuffer option */
         capture_opts->multi_files_on = TRUE;
         if (get_ring_arguments(capture_opts, optarg) == FALSE) {
           cmdarg_err("Invalid or unknown -b arg \"%s\"", optarg);
-          exit(1);
+          return 1;
         }
         break;
 #ifdef _WIN32
@@ -391,7 +395,10 @@ capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg,
         capture_opts->show_info = FALSE;
         break;
     case 'i':        /* Use interface xxx */
-        capture_opts_add_iface_opt(capture_opts, optarg);
+        status = capture_opts_add_iface_opt(capture_opts, optarg);
+        if(status != 0) {
+            return status;
+        }
         break;
     case 'k':        /* Start capture immediately */
         *start_capture = TRUE;
@@ -418,7 +425,8 @@ capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg,
 #else
         capture_opts->save_file = g_strdup(optarg);
 #endif
-        capture_opts->output_to_pipe = capture_opts_output_to_pipe(capture_opts->save_file);
+        status = capture_opts_output_to_pipe(capture_opts->save_file, &capture_opts->output_to_pipe);
+        return status;
            break;
     case 'y':        /* Set the pcap data link type */
 #ifdef HAVE_PCAP_DATALINK_NAME_TO_VAL
@@ -426,7 +434,7 @@ capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg,
         if (capture_opts->linktype == -1) {
           cmdarg_err("The specified data link type \"%s\" isn't valid",
                   optarg);
-          exit(1);
+          return 1;
         }
 #else /* HAVE_PCAP_DATALINK_NAME_TO_VAL */
         /* XXX - just treat it as a number */
@@ -438,7 +446,7 @@ capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg,
     case 'Z':        /* Write to pipe FD XXX */
        if (get_pipe_arguments(capture_opts, optarg) == FALSE) {
           cmdarg_err("Invalid or unknown -Z flag \"%s\"", optarg);
-          exit(1);
+          return 1;
         }
         break;
 #endif /* _WIN32 */
@@ -446,10 +454,12 @@ capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg,
         /* the caller is responsible to send us only the right opt's */
         g_assert_not_reached();
     }
+
+    return 0;
 }
 
 
-void capture_opts_list_link_layer_types(capture_options *capture_opts)
+int capture_opts_list_link_layer_types(capture_options *capture_opts)
 {
     gchar err_str[PCAP_ERRBUF_SIZE];
     GList *lt_list, *lt_entry;
@@ -464,7 +474,7 @@ void capture_opts_list_link_layer_types(capture_options *capture_opts)
          "you have the proper interface or pipe specified.\n", err_str);
       } else
        cmdarg_err("The capture device has no data link types.");
-      exit(2);
+      return 2;
     }
     cmdarg_err_cont("Data link types (use option -y to set):");
     for (lt_entry = lt_list; lt_entry != NULL;
@@ -478,10 +488,12 @@ void capture_opts_list_link_layer_types(capture_options *capture_opts)
       putchar('\n');
     }
     free_pcap_linktype_list(lt_list);
+
+    return 0;
 }
 
 
-void capture_opts_list_interfaces()
+int capture_opts_list_interfaces()
 {
     GList       *if_list;
     GList       *if_entry;
@@ -505,7 +517,7 @@ void capture_opts_list_interfaces()
             cmdarg_err("There are no interfaces on which a capture can be done");
         break;
         }
-        exit(2);
+        return 2;
     }
 
     i = 1;  /* Interface id number */
@@ -518,6 +530,8 @@ void capture_opts_list_interfaces()
         printf("\n");
     }
     free_interface_list(if_list);
+
+    return 0;
 }
 
 
@@ -607,7 +621,7 @@ static int capture_opts_test_for_fifo(const char *path)
                return 0;
 }
 
-static gboolean capture_opts_output_to_pipe(const char *save_file)
+static gboolean capture_opts_output_to_pipe(const char *save_file, gboolean *is_pipe)
 {
   int err;
 
@@ -619,7 +633,7 @@ static gboolean capture_opts_output_to_pipe(const char *save_file)
          silly to do "-w - >output_file" rather than "-w output_file",
          but by not checking we might be violating the Principle Of
          Least Astonishment. */
-      return TRUE;
+      *is_pipe = TRUE;
     } else {
       /* not a capture file, test for a FIFO (aka named pipe) */
       err = capture_opts_test_for_fifo(save_file);
@@ -631,18 +645,20 @@ static gboolean capture_opts_output_to_pipe(const char *save_file)
         break;
 
       case ESPIPE:     /* it is a FIFO */
-        return TRUE;
+        *is_pipe = TRUE;
         break;
 
       default:         /* couldn't stat it */
         cmdarg_err("Error testing whether capture file is a pipe: %s",
                 strerror(errno));
-        exit(2);
+        return 2;
       }
     }
   }
 
-  return FALSE;
+  *is_pipe = FALSE;
+
+  return 0;
 }
 
 #endif /* HAVE_LIBPCAP */
index 7bf7c177ea38e9b4eb5c15684079d36204e497a6..178757e2c85104b277481875e83be7f81cb51aff 100644 (file)
@@ -103,7 +103,7 @@ extern void
 capture_opts_init(capture_options *capture_opts, void *cfile);
 
 /* set a command line option value */
-extern void
+extern int
 capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg, gboolean *start_capture);
 
 /* log content of capture_opts */
@@ -111,11 +111,11 @@ extern void
 capture_opts_log(const char *log_domain, GLogLevelFlags log_level, capture_options *capture_opts);
 
 /* list link layer types */
-extern void 
+extern int
 capture_opts_list_link_layer_types(capture_options *capture_opts);
 
 /* list interfaces */
-extern void
+extern int
 capture_opts_list_interfaces(void);
 
 /* trim the snaplen entry */
index a8e84d776d16a120f38dc859a2f647c43d5a9415..659b922ba8f6577210103484d133a197b32ddb71 100644 (file)
--- a/dumpcap.c
+++ b/dumpcap.c
@@ -252,6 +252,7 @@ main(int argc, char *argv[])
   struct pcap_stat     stats;
   GLogLevelFlags       log_flags;
   gboolean             list_link_layer_types = FALSE;
+  int                  status;
 
 #define OPTSTRING_INIT "a:b:c:Df:hi:Lps:vw:y:"
 
@@ -358,13 +359,16 @@ main(int argc, char *argv[])
       /* Hidden option supporting Sync mode */
       case 'Z':        /* Write to pipe FD x */
 #endif /* _WIN32 */
-        capture_opts_add_opt(capture_opts, opt, optarg, &start_capture);
+        status = capture_opts_add_opt(capture_opts, opt, optarg, &start_capture);
+        if(status != 0) {
+            exit_main(status);
+        }
         break;
 
       /*** all non capture option specific ***/
       case 'D':        /* Print a list of capture devices and exit */
-        capture_opts_list_interfaces();
-        exit_main(0);
+        status = capture_opts_list_interfaces();
+        exit_main(status);
         break;
       case 'L':        /* Print list of link-layer types and exit */
         list_link_layer_types = TRUE;
@@ -441,8 +445,8 @@ main(int argc, char *argv[])
   }  
 
   if (list_link_layer_types) {
-    capture_opts_list_link_layer_types(capture_opts);
-    exit_main(0);
+    status = capture_opts_list_link_layer_types(capture_opts);
+    exit_main(status);
   }
 
   capture_opts_trim_snaplen(capture_opts, MIN_PACKET_SIZE);
index 77476c8a719a1d7f4e88034b1d6203d2e6808027..6e0df73fb3d5c416c8f9706f4a57d69b5eea01b6 100644 (file)
@@ -1897,6 +1897,7 @@ main(int argc, char *argv[])
   GLogLevelFlags       log_flags;
   guint                go_to_packet = 0;
   int                  optind_initial;
+  int                  status;
 
 #define OPTSTRING_INIT "a:b:c:Df:g:Hhi:klLm:nN:o:pQr:R:Ss:t:vw:X:y:z:"
 
@@ -2295,7 +2296,10 @@ main(int argc, char *argv[])
       case 'Z':        /* Write to pipe FD XXX */
 #endif /* _WIN32 */
 #ifdef HAVE_LIBPCAP
-        capture_opts_add_opt(capture_opts, opt, optarg, &start_capture);
+        status = capture_opts_add_opt(capture_opts, opt, optarg, &start_capture);
+        if(status != 0) {
+            exit(status);
+        }
 #else
         capture_option_specified = TRUE;
         arg_error = TRUE;
@@ -2553,8 +2557,8 @@ main(int argc, char *argv[])
   }
 
   if (list_link_layer_types) {
-    capture_opts_list_link_layer_types(capture_opts);
-    exit(0);
+    status = capture_opts_list_link_layer_types(capture_opts);
+    exit(status);
   }
 
   capture_opts_trim_snaplen(capture_opts, MIN_PACKET_SIZE);
index 27ea607b458291d7fc76c15560e37bd41c5abe9d..10d6049c1d325969fe2c8d7249edf412c37def93 100644 (file)
@@ -683,6 +683,7 @@ main(int argc, char *argv[])
   e_prefs             *prefs;
   char                 badopt;
   GLogLevelFlags       log_flags;
+  int                  status;
 
 #define OPTSTRING_INIT "a:b:c:d:Df:F:hi:lLnN:o:pqr:R:s:St:T:vVw:xX:y:z:"
 #ifdef HAVE_LIBPCAP
@@ -885,7 +886,10 @@ main(int argc, char *argv[])
       case 'B':        /* Buffer size */
 #endif /* _WIN32 */
 #ifdef HAVE_LIBPCAP
-        capture_opts_add_opt(&capture_opts, opt, optarg, &start_capture);
+        status = capture_opts_add_opt(&capture_opts, opt, optarg, &start_capture);
+        if(status != 0) {
+            exit(status);
+        }
 #else
         capture_option_specified = TRUE;
         arg_error = TRUE;
@@ -897,8 +901,8 @@ main(int argc, char *argv[])
        break;
       case 'D':        /* Print a list of capture devices and exit */
 #ifdef HAVE_LIBPCAP
-        capture_opts_list_interfaces();
-        exit(0);
+        status = capture_opts_list_interfaces();
+        exit(status);
 #else
         capture_option_specified = TRUE;
         arg_error = TRUE;
@@ -1386,8 +1390,8 @@ main(int argc, char *argv[])
 
     /* if requested, list the link layer types and exit */
     if (list_link_layer_types) {
-        capture_opts_list_link_layer_types(&capture_opts);
-        exit(0);
+        status = capture_opts_list_link_layer_types(&capture_opts);
+        exit(status);
     }
 
     if (!quiet) {