-check return value
[oweals/gnunet.git] / src / util / getopt_helpers.c
index d050ec99c18667032aa4b37646cfe56b4cc461e8..a80bff4a368b328f01e0a523613173de5e707349 100644 (file)
@@ -26,7 +26,9 @@
 
 #include "platform.h"
 #include "gnunet_common.h"
-#include "gnunet_getopt_lib.h"
+#include "gnunet_util_lib.h"
+
+#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
 
 
 /**
@@ -77,9 +79,12 @@ GNUNET_GETOPT_format_help_ (struct GNUNET_GETOPT_CommandLineProcessorContext
   const char *trans;
   const struct GNUNET_GETOPT_CommandLineOption *opt;
 
-  printf ("%s\n%s\n", ctx->binaryOptions, gettext (about));
-  printf (_
-          ("Arguments mandatory for long options are also mandatory for short options.\n"));
+  if (NULL != about)
+  {
+    printf ("%s\n%s\n", ctx->binaryOptions, gettext (about));
+    printf (_
+           ("Arguments mandatory for long options are also mandatory for short options.\n"));
+  }
   i = 0;
   opt = ctx->allOptions;
   while (opt[i].description != NULL)
@@ -223,8 +228,7 @@ GNUNET_GETOPT_set_string (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
   char **val = scls;
 
   GNUNET_assert (value != NULL);
-  if (NULL != *val)
-    GNUNET_free (*val);
+  GNUNET_free_non_null (*val);
   *val = GNUNET_strdup (value);
   return GNUNET_OK;
 }
@@ -251,7 +255,7 @@ GNUNET_GETOPT_set_ulong (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
 
   if (1 != SSCANF (value, "%llu", val))
   {
-    fprintf (stderr, _("You must pass a number to the `%s' option.\n"), option);
+    FPRINTF (stderr, _("You must pass a number to the `%s' option.\n"), option);
     return GNUNET_SYSERR;
   }
   return GNUNET_OK;
@@ -259,7 +263,37 @@ GNUNET_GETOPT_set_ulong (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
 
 
 /**
- * Set an option of type 'unsigned long long' from the command line.
+ * Set an option of type 'struct GNUNET_TIME_Relative' from the command line.
+ * A pointer to this function should be passed as part of the
+ * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options
+ * of this type.  It should be followed by a pointer to a value of
+ * type 'struct GNUNET_TIME_Relative'.
+ *
+ * @param ctx command line processing context
+ * @param scls additional closure (will point to the 'struct GNUNET_TIME_Relative')
+ * @param option name of the option
+ * @param value actual value of the option as a string.
+ * @return GNUNET_OK if parsing the value worked
+ */
+int
+GNUNET_GETOPT_set_relative_time (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
+                                void *scls, const char *option, const char *value)
+{
+  struct GNUNET_TIME_Relative *val = scls;
+
+  if (GNUNET_OK !=
+      GNUNET_STRINGS_fancy_time_to_relative (value,
+                                            val))
+  {
+    FPRINTF (stderr, _("You must pass relative time to the `%s' option.\n"), option);
+    return GNUNET_SYSERR;
+  }
+  return GNUNET_OK;
+}
+
+
+/**
+ * Set an option of type 'unsigned int' from the command line.
  * A pointer to this function should be passed as part of the
  * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options
  * of this type.  It should be followed by a pointer to a value of
@@ -279,7 +313,7 @@ GNUNET_GETOPT_set_uint (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
 
   if (1 != SSCANF (value, "%u", val))
   {
-    fprintf (stderr, _("You must pass a number to the `%s' option.\n"), option);
+    FPRINTF (stderr, _("You must pass a number to the `%s' option.\n"), option);
     return GNUNET_SYSERR;
   }
   return GNUNET_OK;