btrfs-progs: support unquoted values in json
For null or boolean values the "..." quoting must not be done, add support for that. This is detected internally for each printed value. Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
29060ec176
commit
b890183072
|
@ -142,6 +142,12 @@ static void fmt_separator(struct format_ctx *fctx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Detect formats or values that must not be quoted (null, bool) */
|
||||||
|
static bool fmt_set_unquoted(struct format_ctx *fctx, const struct rowspec *row)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void fmt_start(struct format_ctx *fctx, const struct rowspec *spec, int width,
|
void fmt_start(struct format_ctx *fctx, const struct rowspec *spec, int width,
|
||||||
int indent)
|
int indent)
|
||||||
{
|
{
|
||||||
|
@ -206,6 +212,7 @@ void fmt_start_value(struct format_ctx *fctx, const struct rowspec *row)
|
||||||
} else if (bconf.output_format == CMD_FORMAT_JSON) {
|
} else if (bconf.output_format == CMD_FORMAT_JSON) {
|
||||||
if (strcmp(row->fmt, "list") == 0) {
|
if (strcmp(row->fmt, "list") == 0) {
|
||||||
} else if (strcmp(row->fmt, "map") == 0) {
|
} else if (strcmp(row->fmt, "map") == 0) {
|
||||||
|
} else if (fctx->unquoted) {
|
||||||
} else {
|
} else {
|
||||||
putchar('"');
|
putchar('"');
|
||||||
}
|
}
|
||||||
|
@ -224,6 +231,7 @@ void fmt_end_value(struct format_ctx *fctx, const struct rowspec *row)
|
||||||
if (bconf.output_format == CMD_FORMAT_JSON) {
|
if (bconf.output_format == CMD_FORMAT_JSON) {
|
||||||
if (strcmp(row->fmt, "list") == 0) {
|
if (strcmp(row->fmt, "list") == 0) {
|
||||||
} else if (strcmp(row->fmt, "map") == 0) {
|
} else if (strcmp(row->fmt, "map") == 0) {
|
||||||
|
} else if (fctx->unquoted) {
|
||||||
} else {
|
} else {
|
||||||
putchar('"');
|
putchar('"');
|
||||||
}
|
}
|
||||||
|
@ -319,6 +327,7 @@ void fmt_print(struct format_ctx *fctx, const char* key, ...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fctx->unquoted = fmt_set_unquoted(fctx, row);
|
||||||
fmt_start_value(fctx, row);
|
fmt_start_value(fctx, row);
|
||||||
|
|
||||||
if (row->fmt[0] == '%') {
|
if (row->fmt[0] == '%') {
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#define __BTRFS_FORMAT_OUTPUT_H__
|
#define __BTRFS_FORMAT_OUTPUT_H__
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
struct rowspec {
|
struct rowspec {
|
||||||
/* Identifier for the row */
|
/* Identifier for the row */
|
||||||
|
@ -73,6 +74,8 @@ struct format_ctx {
|
||||||
|
|
||||||
char jtype[JSON_NESTING_LIMIT];
|
char jtype[JSON_NESTING_LIMIT];
|
||||||
enum json_type memb[JSON_NESTING_LIMIT];
|
enum json_type memb[JSON_NESTING_LIMIT];
|
||||||
|
/* Set if the value needs to be printed unquoted */
|
||||||
|
bool unquoted;
|
||||||
};
|
};
|
||||||
|
|
||||||
void fmt_start(struct format_ctx *fctx, const struct rowspec *spec, int width,
|
void fmt_start(struct format_ctx *fctx, const struct rowspec *spec, int width,
|
||||||
|
|
Loading…
Reference in New Issue