move global capture_child flag into capture_options
[obnox/wireshark/wip.git] / editcap.c
index 16fa5488b4539ac239e5fdfefb40863552804c2a..0708489c5360d806b4f61e8a03b5e0edbdf50341 100644 (file)
--- a/editcap.c
+++ b/editcap.c
@@ -1,7 +1,7 @@
 /* Edit capture files.  We can delete records, adjust timestamps, or
  * simply convert from one format to another format.
  *
- * $Id: editcap.c,v 1.22 2002/03/31 20:39:08 guy Exp $
+ * $Id$
  *
  * Originally written by Richard Sharpe.
  * Improved by Guy Harris.
 #include <sys/time.h>
 #endif
 
-#ifdef HAVE_WINSOCK_H
-#include <winsock.h>
-#endif
-
 #include <string.h>
 #include "wtap.h"
 
@@ -53,8 +49,8 @@ struct time_adjustment {
   int is_negative;
 };
 
-struct select_item selectfrm[100];
-int max_selected = -1;
+static struct select_item selectfrm[100];
+static int max_selected = -1;
 static int count = 1;
 static int keep_em = 0;
 static int out_file_type = WTAP_FILE_PCAP;   /* default to "libpcap"   */
@@ -65,7 +61,7 @@ static struct time_adjustment time_adj = {{0, 0}, 0}; /* no adjustment */
 
 /* Add a selection item, a simple parser for now */
 
-void add_selection(char *sel) 
+static void add_selection(char *sel)
 {
   char *locn;
   char *next;
@@ -105,7 +101,7 @@ void add_selection(char *sel)
 
 /* Was the record selected? */
 
-int selected(int recno)
+static int selected(int recno)
 {
   int i = 0;
 
@@ -137,8 +133,8 @@ typedef struct {
  */
 
 static void
-edit_callback(u_char *user, const struct wtap_pkthdr *phdr, long offset _U_,
-    union wtap_pseudo_header *pseudo_header, const u_char *buf) 
+edit_callback(guchar *user, const struct wtap_pkthdr *phdr, long offset _U_,
+    union wtap_pseudo_header *pseudo_header, const guchar *buf)
 {
   callback_arg *argp = (callback_arg *)user;
   int err;
@@ -191,7 +187,7 @@ edit_callback(u_char *user, const struct wtap_pkthdr *phdr, long offset _U_,
       }
       phdr = &snap_phdr;
     }
-      
+
     if (!wtap_dump(argp->pdh, phdr, pseudo_header, buf, &err)) {
 
       fprintf(stderr, "editcap: Error writing to %s: %s\n", argp->filename,
@@ -234,12 +230,12 @@ set_time_adjustment(char *optarg)
   } else {
       val = strtol(optarg, &frac, 10);
       if (frac == NULL || frac == optarg || val == LONG_MIN || val == LONG_MAX) {
-          fprintf(stderr, "editcap: \"%s\" is not a valid time adjustment\n",
+          fprintf(stderr, "editcap: \"%s\" isn't a valid time adjustment\n",
                   optarg);
           exit(1);
       }
       if (val < 0) {            /* implies '--' since we caught '-' above  */
-          fprintf(stderr, "editcap: \"%s\" is not a valid time adjustment\n",
+          fprintf(stderr, "editcap: \"%s\" isn't a valid time adjustment\n",
                   optarg);
           exit(1);
       }
@@ -251,7 +247,7 @@ set_time_adjustment(char *optarg)
     val = strtol(&(frac[1]), &end, 10);
     if (*frac != '.' || end == NULL || end == frac
         || val < 0 || val > ONE_MILLION || val == LONG_MIN || val == LONG_MAX) {
-      fprintf(stderr, "editcap: \"%s\" is not a valid time adjustment\n",
+      fprintf(stderr, "editcap: \"%s\" isn't a valid time adjustment\n",
               optarg);
       exit(1);
     }
@@ -272,13 +268,13 @@ set_time_adjustment(char *optarg)
   time_adj.tv.tv_usec = val;
 }
 
-void usage()
+static void usage(void)
 {
   int i;
   const char *string;
 
   fprintf(stderr, "Usage: editcap [-r] [-h] [-v] [-T <encap type>] [-F <capture type>]\n");
-  fprintf(stderr, "               [-s <snaplen>] [-t <time adjustment\n");
+  fprintf(stderr, "               [-s <snaplen>] [-t <time adjustment>]\n");
   fprintf(stderr, "               <infile> <outfile> [ <record#>[-<record#>] ... ]\n");
   fprintf(stderr, "  where\t-r specifies that the records specified should be kept, not deleted, \n");
   fprintf(stderr, "                           default is to delete\n");
@@ -311,6 +307,7 @@ int main(int argc, char *argv[])
 {
   wtap *wth;
   int i, err;
+  gchar *err_info;
   callback_arg args;
   extern char *optarg;
   extern int optind;
@@ -327,16 +324,16 @@ int main(int argc, char *argv[])
     case 'T':
       out_frame_type = wtap_short_string_to_encap(optarg);
       if (out_frame_type < 0) {
-       fprintf(stderr, "editcap: \"%s\" is not a valid encapsulation type\n",
+       fprintf(stderr, "editcap: \"%s\" isn't a valid encapsulation type\n",
            optarg);
        exit(1);
       }
       break;
-      
+
     case 'F':
       out_file_type = wtap_short_string_to_file_type(optarg);
       if (out_file_type < 0) {
-       fprintf(stderr, "editcap: \"%s\" is not a valid capture file type\n",
+       fprintf(stderr, "editcap: \"%s\" isn't a valid capture file type\n",
            optarg);
        exit(1);
       }
@@ -353,7 +350,7 @@ int main(int argc, char *argv[])
     case 's':
       snaplen = strtol(optarg, &p, 10);
       if (p == optarg || *p != '\0') {
-       fprintf(stderr, "editcap: \"%s\" is not a valid snapshot length\n",
+       fprintf(stderr, "editcap: \"%s\" isn't a valid snapshot length\n",
            optarg);
        exit(1);
       }
@@ -388,12 +385,20 @@ int main(int argc, char *argv[])
 
   }
 
-  wth = wtap_open_offline(argv[optind], &err, FALSE);
+  wth = wtap_open_offline(argv[optind], &err, &err_info, FALSE);
 
   if (!wth) {
-
     fprintf(stderr, "editcap: Can't open %s: %s\n", argv[optind],
         wtap_strerror(err));
+    switch (err) {
+
+    case WTAP_ERR_UNSUPPORTED:
+    case WTAP_ERR_UNSUPPORTED_ENCAP:
+    case WTAP_ERR_BAD_RECORD:
+      fprintf(stderr, "(%s)\n", err_info);
+      g_free(err_info);
+      break;
+    }
     exit(1);
 
   }
@@ -434,7 +439,20 @@ int main(int argc, char *argv[])
     for (i = optind + 2; i < argc; i++)
       add_selection(argv[i]);
 
-    wtap_loop(wth, 0, edit_callback, (char *)&args, &err);
+    if (!wtap_loop(wth, 0, edit_callback, (char *)&args, &err, &err_info)) {
+      /* Print a message noting that the read failed somewhere along the line. */
+      fprintf(stderr,
+              "editcap: An error occurred while reading \"%s\": %s.\n",
+             argv[optind], wtap_strerror(err));
+      switch (err) {
+
+      case WTAP_ERR_UNSUPPORTED:
+      case WTAP_ERR_UNSUPPORTED_ENCAP:
+      case WTAP_ERR_BAD_RECORD:
+       fprintf(stderr, "(%s)\n", err_info);
+       break;
+      }
+    }
 
     if (!wtap_dump_close(args.pdh, &err)) {
 
@@ -447,4 +465,4 @@ int main(int argc, char *argv[])
 
   return 0;
 }
-  
+