]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
json: port various tools to the new JSON_FORMAT_OFF flag
authorLennart Poettering <lennart@poettering.net>
Sat, 9 Jan 2021 16:08:53 +0000 (17:08 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 9 Jan 2021 16:36:24 +0000 (17:36 +0100)
These are the obvious cases.

src/dissect/dissect.c
src/home/homectl.c
src/partition/repart.c

index dc7e9dc626dc4cb39634a3dc0831aa3f74b77a6e..c5d161b2b5796f343859c89d727c35c2e3e2e3bb 100644 (file)
@@ -45,8 +45,7 @@ static const char *arg_source = NULL;
 static const char *arg_target = NULL;
 static DissectImageFlags arg_flags = DISSECT_IMAGE_REQUIRE_ROOT|DISSECT_IMAGE_DISCARD_ON_LOOP|DISSECT_IMAGE_RELAX_VAR_CHECK|DISSECT_IMAGE_FSCK;
 static VeritySettings arg_verity_settings = VERITY_SETTINGS_DEFAULT;
-static bool arg_json = false;
-static JsonFormatFlags arg_json_format_flags = 0;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 
 STATIC_DESTRUCTOR_REGISTER(arg_verity_settings, verity_settings_done);
 
@@ -242,22 +241,9 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_JSON:
-                        if (streq(optarg, "pretty")) {
-                                arg_json = true;
-                                arg_json_format_flags = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
-                        } else if (streq(optarg, "short")) {
-                                arg_json = true;
-                                arg_json_format_flags = JSON_FORMAT_NEWLINE;
-                        } else if (streq(optarg, "off")) {
-                                arg_json = false;
-                                arg_json_format_flags = 0;
-                        } else if (streq(optarg, "help")) {
-                                puts("pretty\n"
-                                     "short\n"
-                                     "off");
-                                return 0;
-                        } else
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json=: %s", optarg);
+                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
 
                         break;
 
@@ -353,17 +339,17 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
         assert(m);
         assert(d);
 
-        if (!arg_json)
+        if (arg_json_format_flags & JSON_FORMAT_OFF)
                 printf("      Name: %s\n", basename(arg_image));
 
         if (ioctl(d->fd, BLKGETSIZE64, &size) < 0)
                 log_debug_errno(errno, "Failed to query size of loopback device: %m");
-        else if (!arg_json) {
+        else if (arg_json_format_flags & JSON_FORMAT_OFF) {
                 char s[FORMAT_BYTES_MAX];
                 printf("      Size: %s\n", format_bytes(s, sizeof(s), size));
         }
 
-        if (!arg_json)
+        if (arg_json_format_flags & JSON_FORMAT_OFF)
                 putc('\n', stdout);
 
         r = dissected_image_acquire_metadata(m);
@@ -379,7 +365,7 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
                 log_warning_errno(r, "OS image is currently in use, proceeding without showing OS image metadata.");
         else if (r < 0)
                 return log_error_errno(r, "Failed to acquire image metadata: %m");
-        else if (!arg_json) {
+        else if (arg_json_format_flags & JSON_FORMAT_OFF) {
                 if (m->hostname)
                         printf("  Hostname: %s\n", m->hostname);
 
@@ -495,7 +481,11 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
                         return table_log_add_error(r);
         }
 
-        if (arg_json) {
+        if (arg_json_format_flags & JSON_FORMAT_OFF) {
+                r = table_print(t, stdout);
+                if (r < 0)
+                        return table_log_print_error(r);
+        } else {
                 _cleanup_(json_variant_unrefp) JsonVariant *jt = NULL;
 
                 r = table_to_json(t, &jt);
@@ -507,10 +497,6 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
                         return log_oom();
 
                 json_variant_dump(v, arg_json_format_flags, stdout, NULL);
-        } else {
-                r = table_print(t, stdout);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to dump table: %m");
         }
 
         return 0;
index c9e54b1e67f8fb8f3a889b16e78b97419855a1d0..f9c07dfec717df2ab64a3aab7711260da7124d82 100644 (file)
@@ -56,8 +56,7 @@ static uint64_t arg_disk_size_relative = UINT64_MAX;
 static char **arg_pkcs11_token_uri = NULL;
 static char **arg_fido2_device = NULL;
 static bool arg_recovery_key = false;
-static bool arg_json = false;
-static JsonFormatFlags arg_json_format_flags = 0;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 static bool arg_and_resize = false;
 static bool arg_and_change_password = false;
 static enum {
@@ -171,22 +170,19 @@ static int list_homes(int argc, char *argv[], void *userdata) {
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        if (table_get_rows(table) > 1 || arg_json) {
+        if (table_get_rows(table) > 1 || !FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) {
                 r = table_set_sort(table, (size_t) 0, (size_t) -1);
                 if (r < 0)
                         return table_log_sort_error(r);
 
                 table_set_header(table, arg_legend);
 
-                if (arg_json)
-                        r = table_print_json(table, stdout, arg_json_format_flags);
-                else
-                        r = table_print(table, NULL);
+                r = table_print_json(table, stdout, arg_json_format_flags);
                 if (r < 0)
                         return table_log_print_error(r);
         }
 
-        if (arg_legend && !arg_json) {
+        if (arg_legend && (arg_json_format_flags & JSON_FORMAT_OFF)) {
                 if (table_get_rows(table) > 1)
                         printf("\n%zu home areas listed.\n", table_get_rows(table) - 1);
                 else
@@ -462,7 +458,9 @@ static void dump_home_record(UserRecord *hr) {
                 log_warning("Warning: lacking rights to acquire privileged fields of user record of '%s', output incomplete.", hr->user_name);
         }
 
-        if (arg_json) {
+        if (arg_json_format_flags & JSON_FORMAT_OFF)
+                user_record_show(hr, true);
+        else {
                 _cleanup_(user_record_unrefp) UserRecord *stripped = NULL;
 
                 if (arg_export_format == EXPORT_FORMAT_STRIPPED)
@@ -477,8 +475,7 @@ static void dump_home_record(UserRecord *hr) {
                         hr = stripped;
 
                 json_variant_dump(hr->json, arg_json_format_flags, stdout, NULL);
-        } else
-                user_record_show(hr, true);
+        }
 }
 
 static char **mangle_user_list(char **list, char ***ret_allocated) {
@@ -3235,27 +3232,13 @@ static int parse_argv(int argc, char *argv[]) {
                 }
 
                 case 'j':
-                        arg_json = true;
                         arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO;
                         break;
 
                 case ARG_JSON:
-                        if (streq(optarg, "pretty")) {
-                                arg_json = true;
-                                arg_json_format_flags = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
-                        } else if (streq(optarg, "short")) {
-                                arg_json = true;
-                                arg_json_format_flags = JSON_FORMAT_NEWLINE;
-                        } else if (streq(optarg, "off")) {
-                                arg_json = false;
-                                arg_json_format_flags = 0;
-                        } else if (streq(optarg, "help")) {
-                                puts("pretty\n"
-                                     "short\n"
-                                     "off");
-                                return 0;
-                        } else
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json=: %s", optarg);
+                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
 
                         break;
 
@@ -3267,7 +3250,7 @@ static int parse_argv(int argc, char *argv[]) {
                         else
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Specifying -E more than twice is not supported.");
 
-                        arg_json = true;
+                        arg_json_format_flags &= ~JSON_FORMAT_OFF;
                         if (arg_json_format_flags == 0)
                                 arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO;
                         break;
index 02d7f227f80fbafeb79ab324feb945d5c6b19ada..d98051d1349094657820d19866aa9b93e542e8eb 100644 (file)
@@ -106,8 +106,7 @@ static bool arg_randomize = false;
 static int arg_pretty = -1;
 static uint64_t arg_size = UINT64_MAX;
 static bool arg_size_auto = false;
-static bool arg_json = false;
-static JsonFormatFlags arg_json_format_flags = 0;
+static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
 static void *arg_key = NULL;
 static size_t arg_key_size = 0;
 static char *arg_tpm2_device = NULL;
@@ -1824,7 +1823,7 @@ static int context_dump_partitions(Context *context, const char *node) {
         Partition *p;
         int r;
 
-        if (!arg_json && context->n_partitions == 0) {
+        if ((arg_json_format_flags & JSON_FORMAT_OFF) && context->n_partitions == 0) {
                 log_info("Empty partition table.");
                 return 0;
         }
@@ -1834,12 +1833,12 @@ static int context_dump_partitions(Context *context, const char *node) {
                 return log_oom();
 
         if (!DEBUG_LOGGING) {
-                if (arg_json)
+                if (arg_json_format_flags & JSON_FORMAT_OFF)
                         (void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4,
-                                                    (size_t) 5, (size_t) 6, (size_t) 7, (size_t) 9, (size_t) 10, (size_t) 12, (size_t) -1);
+                                                    (size_t) 8, (size_t) 11, (size_t) -1);
                 else
                         (void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4,
-                                                    (size_t) 8, (size_t) 11, (size_t) -1);
+                                                    (size_t) 5, (size_t) 6, (size_t) 7, (size_t) 9, (size_t) 10, (size_t) 12, (size_t) -1);
         }
 
         (void) table_set_align_percent(t, table_get_cell(t, 0, 4), 100);
@@ -1893,7 +1892,7 @@ static int context_dump_partitions(Context *context, const char *node) {
                         return table_log_add_error(r);
         }
 
-        if (!arg_json && (sum_padding > 0 || sum_size > 0)) {
+        if ((arg_json_format_flags & JSON_FORMAT_OFF) && (sum_padding > 0 || sum_size > 0)) {
                 char s[FORMAT_BYTES_MAX];
                 const char *a, *b;
 
@@ -1919,12 +1918,9 @@ static int context_dump_partitions(Context *context, const char *node) {
                         return table_log_add_error(r);
         }
 
-        if (arg_json)
-                r = table_print_json(t, stdout, arg_json_format_flags);
-        else
-                r = table_print(t, stdout);
+        r = table_print_json(t, stdout, arg_json_format_flags);
         if (r < 0)
-                return log_error_errno(r, "Failed to dump table: %m");
+                return table_log_print_error(r);
 
         return 0;
 }
@@ -3203,13 +3199,13 @@ static int context_write_partition_table(
 
         if (arg_pretty > 0 ||
             (arg_pretty < 0 && isatty(STDOUT_FILENO) > 0) ||
-            arg_json) {
+            !FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) {
 
                 (void) context_dump_partitions(context, node);
 
                 putc('\n', stdout);
 
-                if (!arg_json)
+                if (arg_json_format_flags & JSON_FORMAT_OFF)
                         (void) context_dump_partition_bar(context, node);
                 putc('\n', stdout);
                 fflush(stdout);
@@ -3679,22 +3675,9 @@ static int parse_argv(int argc, char *argv[]) {
                 }
 
                 case ARG_JSON:
-                        if (streq(optarg, "pretty")) {
-                                arg_json = true;
-                                arg_json_format_flags = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
-                        } else if (streq(optarg, "short")) {
-                                arg_json = true;
-                                arg_json_format_flags = JSON_FORMAT_NEWLINE;
-                        } else if (streq(optarg, "off")) {
-                                arg_json = false;
-                                arg_json_format_flags = 0;
-                        } else if (streq(optarg, "help")) {
-                                puts("pretty\n"
-                                     "short\n"
-                                     "off");
-                                return 0;
-                        } else
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json=: %s", optarg);
+                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        if (r <= 0)
+                                return r;
 
                         break;