]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
devlink: Change empty line indication with indentations
authorArkadi Sharshevsky <arkadis@mellanox.com>
Wed, 14 Feb 2018 08:55:16 +0000 (10:55 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Fri, 23 Feb 2018 16:36:05 +0000 (08:36 -0800)
Currently multi-line objects are separated by new-lines. This patch
changes this behavior by using indentations for separation.

Signed-off-by: Arkadi Sharhsevsky <arkadis@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
devlink/devlink.c

index 220b2bb2f3bd8a4bb08d8f3e6978a42a1b380088..8e089f80c7727951eb02121ee830fa3fcfce904a 100644 (file)
@@ -35,6 +35,8 @@
 #define ESWITCH_INLINE_MODE_NETWORK "network"
 #define ESWITCH_INLINE_MODE_TRANSPORT "transport"
 
+static int g_new_line_count;
+
 #define pr_err(args...) fprintf(stderr, ##args)
 #define pr_out(args...)                                                \
        do {                                                    \
@@ -43,6 +45,7 @@
                        g_indent_newline = false;               \
                }                                               \
                fprintf(stdout, ##args);                        \
+               g_new_line_count = 0;                           \
        } while (0)
 
 #define pr_out_sp(num, args...)                                        \
@@ -50,6 +53,7 @@
                int ret = fprintf(stdout, ##args);              \
                if (ret < num)                                  \
                        fprintf(stdout, "%*s", num - ret, "");  \
+               g_new_line_count = 0;                           \
        } while (0)
 
 static int g_indent_level;
@@ -77,8 +81,11 @@ static void __pr_out_indent_dec(void)
 
 static void __pr_out_newline(void)
 {
-       pr_out("\n");
-       g_indent_newline = true;
+       if (g_new_line_count < 1) {
+               pr_out("\n");
+               g_indent_newline = true;
+       }
+       g_new_line_count++;
 }
 
 static int _mnlg_socket_recv_run(struct mnlg_socket *nlg,
@@ -1401,20 +1408,22 @@ static void pr_out_array_start(struct dl *dl, const char *name)
                jsonw_name(dl->jw, name);
                jsonw_start_array(dl->jw);
        } else {
-               if (!g_indent_newline)
-                       __pr_out_newline();
-               pr_out("%s:", name);
+               __pr_out_indent_inc();
                __pr_out_newline();
+               pr_out("%s:", name);
                __pr_out_indent_inc();
+               __pr_out_newline();
        }
 }
 
 static void pr_out_array_end(struct dl *dl)
 {
-       if (dl->json_output)
+       if (dl->json_output) {
                jsonw_end_array(dl->jw);
-       else
+       } else {
+               __pr_out_indent_dec();
                __pr_out_indent_dec();
+       }
 }
 
 static void pr_out_entry_start(struct dl *dl)