]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
json: move json printer to common library
authorDaniel Borkmann <daniel@iogearbox.net>
Thu, 21 Sep 2017 08:42:28 +0000 (10:42 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Fri, 22 Sep 2017 17:06:43 +0000 (10:06 -0700)
Move the json printer which is based on json writer into the
iproute2 library, so it can be used by library code and tools
other than ip. Should probably have been done from the beginning
like that given json writer is in the library already anyway.
No functional changes.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Julien Fortin <julien@cumulusnetworks.com>
include/json_print.h [new file with mode: 0644]
ip/Makefile
ip/ip_common.h
lib/Makefile
lib/json_print.c [moved from ip/ip_print.c with 97% similarity]

diff --git a/include/json_print.h b/include/json_print.h
new file mode 100644 (file)
index 0000000..44cf5ac
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * json_print.h                "print regular or json output, based on json_writer".
+ *
+ *             This program 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 Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ * Authors:    Julien Fortin, <julien@cumulusnetworks.com>
+ */
+
+#ifndef _JSON_PRINT_H_
+#define _JSON_PRINT_H_
+
+#include "json_writer.h"
+#include "color.h"
+
+json_writer_t *get_json_writer(void);
+
+/*
+ * use:
+ *      - PRINT_ANY for context based output
+ *      - PRINT_FP for non json specific output
+ *      - PRINT_JSON for json specific output
+ */
+enum output_type {
+       PRINT_FP = 1,
+       PRINT_JSON = 2,
+       PRINT_ANY = 4,
+};
+
+void new_json_obj(int json, FILE *fp);
+void delete_json_obj(void);
+
+bool is_json_context(void);
+
+void set_current_fp(FILE *fp);
+
+void fflush_fp(void);
+
+void open_json_object(const char *str);
+void close_json_object(void);
+void open_json_array(enum output_type type, const char *delim);
+void close_json_array(enum output_type type, const char *delim);
+
+#define _PRINT_FUNC(type_name, type)                                   \
+       void print_color_##type_name(enum output_type t,                \
+                                    enum color_attr color,             \
+                                    const char *key,                   \
+                                    const char *fmt,                   \
+                                    type value);                       \
+                                                                       \
+       static inline void print_##type_name(enum output_type t,        \
+                                            const char *key,           \
+                                            const char *fmt,           \
+                                            type value)                \
+       {                                                               \
+               print_color_##type_name(t, -1, key, fmt, value);        \
+       }
+_PRINT_FUNC(int, int);
+_PRINT_FUNC(bool, bool);
+_PRINT_FUNC(null, const char*);
+_PRINT_FUNC(string, const char*);
+_PRINT_FUNC(uint, uint64_t);
+_PRINT_FUNC(hu, unsigned short);
+_PRINT_FUNC(hex, unsigned int);
+_PRINT_FUNC(0xhex, unsigned int);
+_PRINT_FUNC(lluint, unsigned long long int);
+#undef _PRINT_FUNC
+
+#endif /* _JSON_PRINT_H_ */
index 52c9a2e53c5640f2d4459bb35147105cdf34a508..5a1c7ad2d264d452092244c52da6ec4461ae04d3 100644 (file)
@@ -9,7 +9,7 @@ IPOBJ=ip.o ipaddress.o ipaddrlabel.o iproute.o iprule.o ipnetns.o \
     link_iptnl.o link_gre6.o iplink_bond.o iplink_bond_slave.o iplink_hsr.o \
     iplink_bridge.o iplink_bridge_slave.o ipfou.o iplink_ipvlan.o \
     iplink_geneve.o iplink_vrf.o iproute_lwtunnel.o ipmacsec.o ipila.o \
-    ipvrf.o iplink_xstats.o ipseg6.o ip_print.o
+    ipvrf.o iplink_xstats.o ipseg6.o
 
 RTMONOBJ=rtmon.o
 
index efc789cb974d2d07584d413aaf8121b847a8ac15..4b8b0a71b87890123dcd5eea951cdbcbb3745c6b 100644 (file)
@@ -1,3 +1,10 @@
+#ifndef _IP_COMMON_H_
+#define _IP_COMMON_H_
+
+#include <stdbool.h>
+
+#include "json_print.h"
+
 struct link_filter {
        int ifindex;
        int family;
@@ -101,8 +108,6 @@ static inline int rtm_get_table(struct rtmsg *r, struct rtattr **tb)
 
 extern struct rtnl_handle rth;
 
-#include <stdbool.h>
-
 struct link_util {
        struct link_util        *next;
        const char              *id;
@@ -141,58 +146,4 @@ int name_is_vrf(const char *name);
 
 void print_num(FILE *fp, unsigned int width, uint64_t count);
 
-#include "json_writer.h"
-
-json_writer_t   *get_json_writer(void);
-/*
- * use:
- *      - PRINT_ANY for context based output
- *      - PRINT_FP for non json specific output
- *      - PRINT_JSON for json specific output
- */
-enum output_type {
-       PRINT_FP = 1,
-       PRINT_JSON = 2,
-       PRINT_ANY = 4,
-};
-
-void new_json_obj(int json, FILE *fp);
-void delete_json_obj(void);
-
-bool is_json_context(void);
-
-void set_current_fp(FILE *fp);
-
-void fflush_fp(void);
-
-void open_json_object(const char *str);
-void close_json_object(void);
-void open_json_array(enum output_type type, const char *delim);
-void close_json_array(enum output_type type, const char *delim);
-
-#include "color.h"
-
-#define _PRINT_FUNC(type_name, type)                                   \
-       void print_color_##type_name(enum output_type t,                \
-                                    enum color_attr color,             \
-                                    const char *key,                   \
-                                    const char *fmt,                   \
-                                    type value);                       \
-                                                                       \
-       static inline void print_##type_name(enum output_type t,        \
-                                            const char *key,           \
-                                            const char *fmt,           \
-                                            type value)                \
-       {                                                               \
-               print_color_##type_name(t, -1, key, fmt, value);        \
-       }
-_PRINT_FUNC(int, int);
-_PRINT_FUNC(bool, bool);
-_PRINT_FUNC(null, const char*);
-_PRINT_FUNC(string, const char*);
-_PRINT_FUNC(uint, uint64_t);
-_PRINT_FUNC(hu, unsigned short);
-_PRINT_FUNC(hex, unsigned int);
-_PRINT_FUNC(0xhex, unsigned int);
-_PRINT_FUNC(lluint, unsigned long long int);
-#undef _PRINT_FUNC
+#endif /* _IP_COMMON_H_ */
index 5e9f72facd36f4ba50d5717b57bc2c002da9873a..0fbdf4c31f5007e1cc28afe942a4e4ab1c4bd5e9 100644 (file)
@@ -3,7 +3,7 @@ include ../config.mk
 CFLAGS += -fPIC
 
 UTILOBJ = utils.o rt_names.o ll_types.o ll_proto.o ll_addr.o \
-       inet_proto.o namespace.o json_writer.o \
+       inet_proto.o namespace.o json_writer.o json_print.o \
        names.o color.o bpf.o exec.o fs.o
 
 NLOBJ=libgenl.o ll_map.o libnetlink.o
similarity index 97%
rename from ip/ip_print.c
rename to lib/json_print.c
index 4cd6a0bc4e0cb92c96effe2c09e18e63114d5557..93b4119dff9907c901ec2c9200520e4b9a8a04ec 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * ip_print.c          "ip print regular or json output".
+ * json_print.c                "print regular or json output, based on json_writer".
  *
  *             This program is free software; you can redistribute it and/or
  *             modify it under the terms of the GNU General Public License
@@ -7,15 +7,13 @@
  *             2 of the License, or (at your option) any later version.
  *
  * Authors:    Julien Fortin, <julien@cumulusnetworks.com>
- *
  */
 
 #include <stdarg.h>
 #include <stdio.h>
 
 #include "utils.h"
-#include "ip_common.h"
-#include "json_writer.h"
+#include "json_print.h"
 
 static json_writer_t *_jw;
 static FILE *_fp;