[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnunet] 11/28: add json command line option parser
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnunet] 11/28: add json command line option parser |
Date: |
Fri, 17 Mar 2017 12:09:43 +0100 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository gnunet.
commit 7b51d9f06fd6b18f54a4c7f2cbbacfd6e85ba85e
Author: Christian Grothoff <address@hidden>
AuthorDate: Wed Mar 15 10:36:51 2017 +0100
add json command line option parser
---
src/include/gnunet_json_lib.h | 20 ++++++++++++
src/json/json.c | 73 ++++++++++++++++++++++++++++++++++++++++---
src/util/getopt_helpers.c | 2 +-
3 files changed, 90 insertions(+), 5 deletions(-)
diff --git a/src/include/gnunet_json_lib.h b/src/include/gnunet_json_lib.h
index 9e5f9e284..ce721d8d8 100644
--- a/src/include/gnunet_json_lib.h
+++ b/src/include/gnunet_json_lib.h
@@ -427,6 +427,26 @@ void
GNUNET_JSON_post_parser_cleanup (void *con_cls);
+/* ****************** GETOPT JSON helper ******************* */
+
+
+/**
+ * Allow user to specify a JSON input value.
+ *
+ * @param shortName short name of the option
+ * @param name long name of the option
+ * @param argumentHelp help text for the option argument
+ * @param description long help text for the option
+ * @param[out] val set to the JSON specified at the command line
+ */
+struct GNUNET_GETOPT_CommandLineOption
+GNUNET_JSON_getopt (char shortName,
+ const char *name,
+ const char *argumentHelp,
+ const char *description,
+ json_t **json);
+
+
#endif
/* end of gnunet_json_lib.h */
diff --git a/src/json/json.c b/src/json/json.c
index a2d1a9608..c182a02f4 100644
--- a/src/json/json.c
+++ b/src/json/json.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet
- Copyright (C) 2014, 2015, 2016 GNUnet e.V.
+ Copyright (C) 2014-2017 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -82,13 +82,78 @@ GNUNET_JSON_parse (const json_t *root,
void
GNUNET_JSON_parse_free (struct GNUNET_JSON_Specification *spec)
{
- unsigned int i;
-
- for (i=0;NULL != spec[i].parser;i++)
+ for (unsigned int i=0;NULL != spec[i].parser;i++)
if (NULL != spec[i].cleaner)
spec[i].cleaner (spec[i].cls,
&spec[i]);
}
+/**
+ * Set an option with a JSON value 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.
+ *
+ * @param ctx command line processing context
+ * @param scls additional closure (will point to the 'json_t *')
+ * @param option name of the option
+ * @param value actual value of the option as a string.
+ * @return #GNUNET_OK if parsing the value worked
+ */
+static int
+set_json (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
+ void *scls,
+ const char *option,
+ const char *value)
+{
+ json_t **json = scls;
+ json_error_t error;
+
+ *json = json_loads (value,
+ JSON_REJECT_DUPLICATES,
+ &error);
+ if (NULL == *json)
+ {
+ FPRINTF (stderr,
+ _("Failed to parse JSON in option `%s': %s (%s)\n"),
+ option,
+ error.text,
+ error.source);
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
+
+
+/**
+ * Allow user to specify a JSON input value.
+ *
+ * @param shortName short name of the option
+ * @param name long name of the option
+ * @param argumentHelp help text for the option argument
+ * @param description long help text for the option
+ * @param[out] val set to the JSON specified at the command line
+ */
+struct GNUNET_GETOPT_CommandLineOption
+GNUNET_JSON_getopt (char shortName,
+ const char *name,
+ const char *argumentHelp,
+ const char *description,
+ json_t **json)
+{
+ struct GNUNET_GETOPT_CommandLineOption clo = {
+ .shortName = shortName,
+ .name = name,
+ .argumentHelp = argumentHelp,
+ .description = description,
+ .require_argument = 1,
+ .processor = &set_json,
+ .scls = (void *) json
+ };
+
+ return clo;
+}
+
+
/* end of json.c */
diff --git a/src/util/getopt_helpers.c b/src/util/getopt_helpers.c
index 31fe093a9..a94847a47 100644
--- a/src/util/getopt_helpers.c
+++ b/src/util/getopt_helpers.c
@@ -654,7 +654,7 @@ GNUNET_GETOPT_OPTION_SET_RELATIVE_TIME (char shortName,
* type 'struct GNUNET_TIME_Absolute'.
*
* @param ctx command line processing context
- * @param scls additional closure (will point to the 'struct
GNUNET_TIME_Relative')
+ * @param scls additional closure (will point to the `struct
GNUNET_TIME_Absolute`)
* @param option name of the option
* @param value actual value of the option as a string.
* @return #GNUNET_OK if parsing the value worked
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnunet] branch master updated (2951cdb72 -> 5b085881a), gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 02/28: Test commit, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 04/28: Merge branch 'getopt' of git+ssh://gnunet.org/gnunet into getopt, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 05/28: add GNUNET_GETOPT_OPTION_SET_ABSOLUTE_TIME, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 06/28: Port 'statistics' to the new getopt API., gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 03/28: fix test case, implement base32 argument parser logic, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 01/28: getopt major style fix, remove macro-mania with nicer typed functions, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 12/28: Port 'statistics' to the new getopt API., gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 11/28: add json command line option parser,
gnunet <=
- [GNUnet-SVN] [gnunet] 13/28: Porting 'arm'., gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 10/28: add GNUNET_GETOPT_OPTION_SET_ABSOLUTE_TIME, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 15/28: merging, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 16/28: Porting 'nat'., gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 07/28: Porting 'arm'., gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 17/28: Porting 'nat-auto'., gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 14/28: add way to mark options as mandatory, get tests to pass again, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 09/28: fix test case, implement base32 argument parser logic, gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 26/28: Fix compiler warnings., gnunet, 2017/03/17
- [GNUnet-SVN] [gnunet] 27/28: Merge branch 'master' into getopt, gnunet, 2017/03/17