Use get_*_int() from wsutil, rather than defining our own.
authorGuy Harris <guy@alum.mit.edu>
Thu, 3 Jul 2014 08:54:13 +0000 (01:54 -0700)
committerGuy Harris <guy@alum.mit.edu>
Thu, 3 Jul 2014 08:54:38 +0000 (08:54 +0000)
Change-Id: I4811d87a903cc3cea93e12883edf25bcd1271a53
Reviewed-on: https://code.wireshark.org/review/2795
Reviewed-by: Guy Harris <guy@alum.mit.edu>
mergecap.c

index 49dcfe6..450e870 100644 (file)
 #include <wsutil/wsgetopt.h>
 #endif
 
+#include <wsutil/clopts_common.h>
 #include <wsutil/strnatcmp.h>
 #include <wsutil/file_util.h>
+#include <wsutil/cmdarg_err.h>
 #include <wsutil/crash_info.h>
 #include <wsutil/copyright_info.h>
 #include <wsutil/os_version_info.h>
 #include <wsutil/unicode-utils.h>
 #endif /* _WIN32 */
 
-static int
-get_natural_int(const char *string, const char *name)
-{
-  long  number;
-  char *p;
-
-  number = strtol(string, &p, 10);
-  if (p == string || *p != '\0') {
-    fprintf(stderr, "mergecap: The specified %s \"%s\" isn't a decimal number\n",
-            name, string);
-    exit(1);
-  }
-  if (number < 0) {
-    fprintf(stderr, "mergecap: The specified %s is a negative number\n", name);
-    exit(1);
-  }
-  if (number > INT_MAX) {
-    fprintf(stderr, "mergecap: The specified %s is too large (greater than %d)\n",
-            name, INT_MAX);
-    exit(1);
-  }
-  return (int)number;
-}
-
-static int
-get_positive_int(const char *string, const char *name)
-{
-  int number;
-
-  number = get_natural_int(string, name);
-
-  if (number == 0) {
-    fprintf(stderr, "mergecap: The specified %s is zero\n", name);
-    exit(1);
-  }
-
-  return number;
-}
-
 static void
 show_version(GString *comp_info_str, GString *runtime_info_str)
 {
@@ -150,6 +113,27 @@ print_usage(FILE *output)
   fprintf(output, "  -v                verbose output.\n");
 }
 
+/*
+ * Report an error in command-line arguments.
+ */
+static void
+mergecap_cmdarg_err(const char *fmt, va_list ap)
+{
+  fprintf(stderr, "mergecap: ");
+  vfprintf(stderr, fmt, ap);
+  fprintf(stderr, "\n");
+}
+
+/*
+ * Report additional information for an error in command-line arguments.
+ */
+static void
+mergecap_cmdarg_err_cont(const char *fmt, va_list ap)
+{
+  vfprintf(stderr, fmt, ap);
+  fprintf(stderr, "\n");
+}
+
 struct string_elem {
   const char *sstr;     /* The short string */
   const char *lstr;     /* The long string */
@@ -276,6 +260,8 @@ main(int argc, char *argv[])
   gboolean            got_read_error     = FALSE, got_write_error = FALSE;
   int                 count;
 
+  cmdarg_err_init(mergecap_cmdarg_err, mergecap_cmdarg_err_cont);
+
 #ifdef _WIN32
   arg_list_utf_16to8(argc, argv);
   create_app_running_mutex();