X11 (doc): now more of 200Mb for mesa git repo
[metze/wireshark/wip.git] / randpkt.c
index e1695a2caa05927031bd6c52a87e1c432086560b..bf391be2bbe1843d2fbd95fbcea32ec7aaae63a5 100644 (file)
--- a/randpkt.c
+++ b/randpkt.c
@@ -4,8 +4,6 @@
  * Creates random packet traces. Useful for debugging sniffers by testing
  * assumptions about the veracity of the data found in the packet.
  *
- * $Id$
- *
  * Copyright (C) 1999 by Gilbert Ramirez <gram@alumni.rice.edu>
  *
  * This program is free software; you can redistribute it and/or
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#include "config.h"
+#include <config.h>
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
-#ifndef HAVE_GETOPT
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+#ifndef HAVE_GETOPT_LONG
 #include "wsutil/wsgetopt.h"
 #endif
 
@@ -46,6 +48,7 @@
 #include <glib.h>
 #include "wiretap/wtap.h"
 #include "wsutil/file_util.h"
+#include <wsutil/ws_diag_control.h>
 
 #ifdef _WIN32
 #include <wsutil/unicode-utils.h>
@@ -487,7 +490,7 @@ pkt_example examples[] = {
 
 
 static int parse_type(char *string);
-static void usage(void);
+static void usage(gboolean is_error);
 static void seed(void);
 
 static pkt_example* find_example(int type);
@@ -500,6 +503,7 @@ main(int argc, char **argv)
        struct wtap_pkthdr      pkthdr;
        union wtap_pseudo_header *ps_header = &pkthdr.pseudo_header;
        int                     i, j, len_this_pkt, len_random, err;
+       gchar                   *err_info;
        guint8                  buffer[65536];
 
        int                     opt;
@@ -509,13 +513,19 @@ main(int argc, char **argv)
        char                    *produce_filename = NULL;
        int                     produce_max_bytes = 5000;
        pkt_example             *example;
+DIAG_OFF(cast-qual)
+       static const struct option long_options[] = {
+               {(char *)"help", no_argument, NULL, 'h'},
+               {0, 0, 0, 0 }
+       };
+DIAG_ON(cast-qual)
 
 #ifdef _WIN32
        arg_list_utf_16to8(argc, argv);
        create_app_running_mutex();
 #endif /* _WIN32 */
 
-       while ((opt = getopt(argc, argv, "b:c:ht:")) != -1) {
+       while ((opt = getopt_long(argc, argv, "b:c:ht:", long_options, NULL)) != -1) {
                switch (opt) {
                        case 'b':       /* max bytes */
                                produce_max_bytes = atoi(optarg);
@@ -535,8 +545,10 @@ main(int argc, char **argv)
                                break;
 
                        case 'h':
+                               usage(FALSE);
+                               break;
                        default:
-                               usage();
+                               usage(TRUE);
                                break;
                }
        }
@@ -546,7 +558,7 @@ main(int argc, char **argv)
                produce_filename = argv[optind];
        }
        else {
-               usage();
+               usage(TRUE);
        }
 
        example = find_example(produce_type);
@@ -578,6 +590,8 @@ main(int argc, char **argv)
        memset(&pkthdr, 0, sizeof(pkthdr));
        memset(buffer, 0, sizeof(buffer));
 
+       pkthdr.rec_type = REC_TYPE_PACKET;
+       pkthdr.presence_flags = WTAP_HAS_TS;
        pkthdr.pkt_encap = example->sample_wtap_encap;
 
        /* Load the sample pseudoheader into our pseudoheader buffer */
@@ -617,7 +631,11 @@ main(int argc, char **argv)
                        }
                }
 
-               wtap_dump(dump, &pkthdr, &buffer[0], &err);
+               /* XXX - report errors! */
+               if (!wtap_dump(dump, &pkthdr, &buffer[0], &err, &err_info)) {
+                       if (err_info != NULL)
+                               g_free(err_info);
+               }
        }
 
        wtap_dump_close(dump, &err);
@@ -627,24 +645,32 @@ main(int argc, char **argv)
 }
 
 /* Print usage statement and exit program */
-static
-void usage(void)
+static void
+usage(gboolean is_error)
 {
-       int     num_entries = array_length(examples);
-       int     i;
+       FILE    *output;
+       int      num_entries = array_length(examples);
+       int      i;
 
-       printf("Usage: randpkt [-b maxbytes] [-c count] [-t type] filename\n");
-       printf("Default max bytes (per packet) is 5000\n");
-       printf("Default count is 1000.\n");
-       printf("Types:\n");
+       if (!is_error) {
+               output = stdout;
+       }
+       else {
+               output = stderr;
+       }
+
+       fprintf(output, "Usage: randpkt [-b maxbytes] [-c count] [-t type] filename\n");
+       fprintf(output, "Default max bytes (per packet) is 5000\n");
+       fprintf(output, "Default count is 1000.\n");
+       fprintf(output, "Types:\n");
 
        for (i = 0; i < num_entries; i++) {
-               printf("\t%-16s%s\n", examples[i].abbrev, examples[i].longname);
+               fprintf(output, "\t%-16s%s\n", examples[i].abbrev, examples[i].longname);
        }
 
-       printf("\n");
+       fprintf(output, "\n");
 
-       exit(0);
+       exit(is_error ? 1 : 0);
 }
 
 /* Parse command-line option "type" and return enum type */
@@ -689,7 +715,7 @@ void
 seed(void)
 {
        unsigned int    randomness;
-       time_t now;
+       time_t          now;
 #ifndef _WIN32
        int             fd;
        ssize_t         ret;
@@ -737,3 +763,16 @@ fallback:
 
        srand(randomness);
 }
+
+/*
+ * Editor modelines  -  http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 8
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=8 tabstop=8 noexpandtab:
+ * :indentSize=8:tabSize=8:noTabs=false:
+ */