From: jeffm@suse.com
To: linux-btrfs@vger.kernel.org
Cc: Jeff Mahoney <jeffm@suse.com>
Subject: [PATCH 18/20] btrfs-progs: add generic support for json output
Date: Wed, 7 Mar 2018 21:40:45 -0500 [thread overview]
Message-ID: <20180308024047.10104-19-jeffm@suse.com> (raw)
In-Reply-To: <20180308024047.10104-1-jeffm@suse.com>
From: Jeff Mahoney <jeffm@suse.com>
This patch adds support for JSON and JSON-compat output. The latter is
intended to be compatible with Javascript's integers being represented
as 64-bit floats, with only 53 bits usable for the integer component.
Compat mode output will post 64-bit integers as an array of two 32-bit
integers in [high, low] format.
This patch also adds support for reporting which output formats a
command supports as well as detection of the json-c library.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
Makefile.inc.in | 4 ++--
commands.h | 13 +++++++++++++
configure.ac | 6 ++++++
help.c | 25 ++++++++++++++-----------
4 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/Makefile.inc.in b/Makefile.inc.in
index 56271903..68bddbed 100644
--- a/Makefile.inc.in
+++ b/Makefile.inc.in
@@ -18,9 +18,9 @@ BTRFSRESTORE_ZSTD = @BTRFSRESTORE_ZSTD@
SUBST_CFLAGS = @CFLAGS@
SUBST_LDFLAGS = @LDFLAGS@
-LIBS_BASE = @UUID_LIBS@ @BLKID_LIBS@ -L. -pthread
+LIBS_BASE = @UUID_LIBS@ @BLKID_LIBS@ @JSON_LIBS@ -L. -pthread
LIBS_COMP = @ZLIB_LIBS@ @LZO2_LIBS@ @ZSTD_LIBS@
-STATIC_LIBS_BASE = @UUID_LIBS_STATIC@ @BLKID_LIBS_STATIC@ -L. -pthread
+STATIC_LIBS_BASE = @UUID_LIBS_STATIC@ @BLKID_LIBS_STATIC@ @JSON_LIBS_STATIC@ -L. -pthread
STATIC_LIBS_COMP = @ZLIB_LIBS_STATIC@ @LZO2_LIBS_STATIC@ @ZSTD_LIBS_STATIC@
prefix ?= @prefix@
diff --git a/commands.h b/commands.h
index 83316c6d..bf74eaf8 100644
--- a/commands.h
+++ b/commands.h
@@ -19,9 +19,22 @@
enum cmd_output {
CMD_OUTPUT_TEXT = 0,
+#ifdef HAVE_JSON
+ CMD_OUTPUT_JSON,
+ CMD_OUTPUT_JSON_COMPAT,
+#endif
CMD_OUTPUT_MAX,
};
+/*
+ * If we don't have the JSON library, map the flags to text to avoid
+ * more ifdefs elsewhere.
+ */
+#ifndef HAVE_JSON
+#define CMD_OUTPUT_JSON CMD_OUTPUT_TEXT
+#define CMD_OUTPUT_JSON_COMPAT CMD_OUTPUT_TEXT
+#endif
+
#define CMD_OUTPUT_FLAG(x) (1 << (CMD_OUTPUT_##x))
struct cmd_context {
diff --git a/configure.ac b/configure.ac
index 56d17c3a..6aec672a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -197,6 +197,12 @@ PKG_STATIC(UUID_LIBS_STATIC, [uuid])
PKG_CHECK_MODULES(ZLIB, [zlib])
PKG_STATIC(ZLIB_LIBS_STATIC, [zlib])
+PKG_CHECK_MODULES(JSON, [json-c], [
+ AC_DEFINE(HAVE_JSON, [1], [Have JSON]),
+ PKG_STATIC(JSON_LIBS_STATIC, [json-c], [
+ AC_DEFINE(HAVE_JSON_STATIC, [1], [Have JSON static])], [true])
+ ], [true])
+
AC_ARG_ENABLE([zstd],
AS_HELP_STRING([--disable-zstd], [build without zstd support]),
[], [enable_zstd=yes]
diff --git a/help.c b/help.c
index 063e9740..f1710621 100644
--- a/help.c
+++ b/help.c
@@ -32,6 +32,10 @@
const char *cmd_outputs[CMD_OUTPUT_MAX] = {
"text",
+#ifdef HAVE_JSON
+ [CMD_OUTPUT_JSON] = "json",
+ [CMD_OUTPUT_JSON_COMPAT] = "json:compat",
+#endif
};
static char argv0_buf[ARGV0_BUF_SIZE] = "btrfs";
@@ -186,18 +190,17 @@ static int do_usage_one_command(const char * const *usagestr,
fprintf(outf, "%*s%s\n", pad, "", *usagestr++);
/* options (optional) */
- if (!*usagestr || ((flags & USAGE_OPTIONS) == 0))
- return 0;
-
- /*
- * options (if present) should always (even if there is no long
- * description) be prepended with an empty line, skip it
- */
- usagestr++;
+ if (*usagestr && (flags & USAGE_OPTIONS)) {
+ /*
+ * options (if present) should always (even if there is no long
+ * description) be prepended with an empty line, skip it
+ */
+ usagestr++;
- fputc('\n', outf);
- while (*usagestr)
- fprintf(outf, "%*s%s\n", pad, "", *usagestr++);
+ fputc('\n', outf);
+ while (*usagestr)
+ fprintf(outf, "%*s%s\n", pad, "", *usagestr++);
+ }
if (flags & USAGE_FORMAT) {
/* We always support text */
--
2.12.3
next prev parent reply other threads:[~2018-03-08 2:41 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-08 2:40 [PATCH v2 00/20] btrfs-progs: qgroups usability jeffm
2018-03-08 2:40 ` [PATCH 01/20] btrfs-progs: quota: Add -W option to rescan to wait without starting rescan jeffm
2018-05-03 5:17 ` Qu Wenruo
2018-03-08 2:40 ` [PATCH 02/20] btrfs-progs: qgroups: fix misleading index check jeffm
2018-03-08 2:40 ` [PATCH 03/20] btrfs-progs: constify pathnames passed as arguments jeffm
2018-03-08 2:40 ` [PATCH 04/20] btrfs-progs: btrfs-list: add rb_entry helpers for root_info jeffm
2018-03-08 2:40 ` [PATCH 05/20] btrfs-progs: btrfs-list: add btrfs_cleanup_root_info jeffm
2018-03-08 2:40 ` [PATCH 06/20] btrfs-progs: qgroups: add pathname to show output jeffm
2018-03-08 5:33 ` Qu Wenruo
2018-03-08 14:25 ` Jeff Mahoney
2018-03-08 2:40 ` [PATCH 07/20] btrfs-progs: qgroups: introduce and use info and limit structures jeffm
2018-03-08 5:34 ` Qu Wenruo
2018-03-08 2:40 ` [PATCH 08/20] btrfs-progs: qgroups: introduce btrfs_qgroup_query jeffm
2018-03-08 5:54 ` Qu Wenruo
2018-03-08 15:21 ` Jeff Mahoney
2018-03-09 0:27 ` Qu Wenruo
2018-03-08 2:40 ` [PATCH 09/20] btrfs-progs: subvolume: add quota info to btrfs sub show jeffm
2018-03-08 2:40 ` [PATCH 10/20] btrfs-progs: help: convert ints used as bools to bool jeffm
2018-03-08 5:55 ` Qu Wenruo
2018-03-08 2:40 ` [PATCH 11/20] btrfs-progs: reorder placement of help declarations for send/receive jeffm
2018-03-08 2:40 ` [PATCH 12/20] btrfs-progs: filesystem balance: split out special handling jeffm
2018-03-08 2:40 ` [PATCH 13/20] btrfs-progs: use cmd_struct as command entry point jeffm
2018-03-12 3:11 ` Jeff Mahoney
2018-03-12 3:24 ` Jeff Mahoney
2018-03-08 2:40 ` [PATCH 14/20] btrfs-progs: pass cmd_struct to command callback function jeffm
2018-03-08 2:40 ` [PATCH 15/20] btrfs-progs: pass cmd_struct to clean_args_no_options{,_relaxed} jeffm
2018-03-08 2:40 ` [PATCH 16/20] btrfs-progs: pass cmd_struct to usage() jeffm
2018-03-08 2:40 ` [PATCH 17/20] btrfs-progs: add support for output formats jeffm
2018-03-08 2:40 ` jeffm [this message]
2018-03-08 2:40 ` [PATCH 19/20] btrfs-progs: qgroups: add json output for usage command jeffm
2018-03-08 2:40 ` [PATCH 20/20] btrfs-progs: handle command groups directly for common case jeffm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180308024047.10104-19-jeffm@suse.com \
--to=jeffm@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).