print_uint() will silently promote its variable type to uint64_t, but there
is nothing that ensures that the format string specifier passed along with
it fits (and the function name suggest to pass "%u").

Fix this by changing print_uint() to use a native 'unsigned int' type, and
introduce a separate print_u64() function for printing 64-bit values. All
call sites that were actually printing 64-bit values using print_uint() are
converted to use print_u64() instead.

Since print_int() was already using native int types, just add a
print_s64() to match, but don't convert any call sites. For symmetry,
also add a print_luint() method (with no users).

Signed-off-by: Toke Høiland-Jørgensen <t...@toke.dk>
---
v3:
  - Fix a few more call sites.
  - Also add a print_luint() function for symmetry with the existing
    ones.
  
v2 (v1 was submitted by Kevin Darbyshire-Bryant):
  - Add print_u64() and convert call sites that were actually passing
    64-bit values to print_uint().

 include/json_print.h  |  5 +++-
 include/json_writer.h | 15 ++++++++---
 ip/ipaddress.c        | 62 +++++++++++++++++++++----------------------
 ip/ipmacsec.c         |  8 +++---
 ip/ipmroute.c         |  6 ++---
 ip/ipntable.c         | 38 +++++++++++++-------------
 ip/iproute_lwtunnel.c |  6 ++---
 ip/iptuntap.c         |  4 +--
 ip/tcp_metrics.c      |  6 ++---
 lib/json_print.c      |  5 +++-
 lib/json_writer.c     | 43 +++++++++++++++++++++++++++---
 11 files changed, 123 insertions(+), 75 deletions(-)

diff --git a/include/json_print.h b/include/json_print.h
index 2ca7830a..218fedc5 100644
--- a/include/json_print.h
+++ b/include/json_print.h
@@ -56,13 +56,16 @@ void close_json_array(enum output_type type, const char 
*delim);
                print_color_##type_name(t, COLOR_NONE, key, fmt, value);        
\
        }
 _PRINT_FUNC(int, int);
+_PRINT_FUNC(s64, int64_t);
 _PRINT_FUNC(bool, bool);
 _PRINT_FUNC(null, const char*);
 _PRINT_FUNC(string, const char*);
-_PRINT_FUNC(uint, uint64_t);
+_PRINT_FUNC(uint, unsigned int);
+_PRINT_FUNC(u64, uint64_t);
 _PRINT_FUNC(hu, unsigned short);
 _PRINT_FUNC(hex, unsigned int);
 _PRINT_FUNC(0xhex, unsigned int);
+_PRINT_FUNC(luint, unsigned long int);
 _PRINT_FUNC(lluint, unsigned long long int);
 _PRINT_FUNC(float, double);
 #undef _PRINT_FUNC
diff --git a/include/json_writer.h b/include/json_writer.h
index 4b4dec28..9ab88e1d 100644
--- a/include/json_writer.h
+++ b/include/json_writer.h
@@ -34,22 +34,29 @@ void jsonw_string(json_writer_t *self, const char *value);
 void jsonw_bool(json_writer_t *self, bool value);
 void jsonw_float(json_writer_t *self, double number);
 void jsonw_float_fmt(json_writer_t *self, const char *fmt, double num);
-void jsonw_uint(json_writer_t *self, uint64_t number);
+void jsonw_uint(json_writer_t *self, unsigned int number);
+void jsonw_u64(json_writer_t *self, uint64_t number);
 void jsonw_xint(json_writer_t *self, uint64_t number);
 void jsonw_hu(json_writer_t *self, unsigned short number);
-void jsonw_int(json_writer_t *self, int64_t number);
+void jsonw_int(json_writer_t *self, int number);
+void jsonw_s64(json_writer_t *self, int64_t number);
 void jsonw_null(json_writer_t *self);
+void jsonw_luint(json_writer_t *self, unsigned long int num);
 void jsonw_lluint(json_writer_t *self, unsigned long long int num);
 
 /* Useful Combinations of name and value */
 void jsonw_string_field(json_writer_t *self, const char *prop, const char 
*val);
 void jsonw_bool_field(json_writer_t *self, const char *prop, bool value);
 void jsonw_float_field(json_writer_t *self, const char *prop, double num);
-void jsonw_uint_field(json_writer_t *self, const char *prop, uint64_t num);
+void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num);
+void jsonw_u64_field(json_writer_t *self, const char *prop, uint64_t num);
 void jsonw_xint_field(json_writer_t *self, const char *prop, uint64_t num);
 void jsonw_hu_field(json_writer_t *self, const char *prop, unsigned short num);
-void jsonw_int_field(json_writer_t *self, const char *prop, int64_t num);
+void jsonw_int_field(json_writer_t *self, const char *prop, int num);
+void jsonw_s64_field(json_writer_t *self, const char *prop, int64_t num);
 void jsonw_null_field(json_writer_t *self, const char *prop);
+void jsonw_luint_field(json_writer_t *self, const char *prop,
+                       unsigned long int num);
 void jsonw_lluint_field(json_writer_t *self, const char *prop,
                        unsigned long long int num);
 void jsonw_float_field_fmt(json_writer_t *self, const char *prop,
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index aecc9a1d..75539e05 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -554,21 +554,21 @@ static void print_vf_stats64(FILE *fp, struct rtattr 
*vfstats)
 
                /* RX stats */
                open_json_object("rx");
-               print_uint(PRINT_JSON, "bytes", NULL,
+               print_u64(PRINT_JSON, "bytes", NULL,
                           rta_getattr_u64(vf[IFLA_VF_STATS_RX_BYTES]));
-               print_uint(PRINT_JSON, "packets", NULL,
+               print_u64(PRINT_JSON, "packets", NULL,
                           rta_getattr_u64(vf[IFLA_VF_STATS_RX_PACKETS]));
-               print_uint(PRINT_JSON, "multicast", NULL,
+               print_u64(PRINT_JSON, "multicast", NULL,
                           rta_getattr_u64(vf[IFLA_VF_STATS_MULTICAST]));
-               print_uint(PRINT_JSON, "broadcast", NULL,
+               print_u64(PRINT_JSON, "broadcast", NULL,
                           rta_getattr_u64(vf[IFLA_VF_STATS_BROADCAST]));
                close_json_object();
 
                /* TX stats */
                open_json_object("tx");
-               print_uint(PRINT_JSON, "tx_bytes", NULL,
+               print_u64(PRINT_JSON, "tx_bytes", NULL,
                           rta_getattr_u64(vf[IFLA_VF_STATS_TX_BYTES]));
-               print_uint(PRINT_JSON, "tx_packets", NULL,
+               print_u64(PRINT_JSON, "tx_packets", NULL,
                           rta_getattr_u64(vf[IFLA_VF_STATS_TX_PACKETS]));
                close_json_object();
                close_json_object();
@@ -608,69 +608,69 @@ static void __print_link_stats(FILE *fp, struct rtattr 
*tb[])
 
                /* RX stats */
                open_json_object("rx");
-               print_uint(PRINT_JSON, "bytes", NULL, s->rx_bytes);
-               print_uint(PRINT_JSON, "packets", NULL, s->rx_packets);
-               print_uint(PRINT_JSON, "errors", NULL, s->rx_errors);
-               print_uint(PRINT_JSON, "dropped", NULL, s->rx_dropped);
-               print_uint(PRINT_JSON, "over_errors", NULL, s->rx_over_errors);
-               print_uint(PRINT_JSON, "multicast", NULL, s->multicast);
+               print_u64(PRINT_JSON, "bytes", NULL, s->rx_bytes);
+               print_u64(PRINT_JSON, "packets", NULL, s->rx_packets);
+               print_u64(PRINT_JSON, "errors", NULL, s->rx_errors);
+               print_u64(PRINT_JSON, "dropped", NULL, s->rx_dropped);
+               print_u64(PRINT_JSON, "over_errors", NULL, s->rx_over_errors);
+               print_u64(PRINT_JSON, "multicast", NULL, s->multicast);
                if (s->rx_compressed)
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "compressed", NULL, s->rx_compressed);
 
                /* RX error stats */
                if (show_stats > 1) {
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "length_errors",
                                   NULL, s->rx_length_errors);
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "crc_errors",
                                   NULL, s->rx_crc_errors);
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "frame_errors",
                                   NULL, s->rx_frame_errors);
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "fifo_errors",
                                   NULL, s->rx_fifo_errors);
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "missed_errors",
                                   NULL, s->rx_missed_errors);
                        if (s->rx_nohandler)
-                               print_uint(PRINT_JSON,
+                               print_u64(PRINT_JSON,
                                           "nohandler", NULL, s->rx_nohandler);
                }
                close_json_object();
 
                /* TX stats */
                open_json_object("tx");
-               print_uint(PRINT_JSON, "bytes", NULL, s->tx_bytes);
-               print_uint(PRINT_JSON, "packets", NULL, s->tx_packets);
-               print_uint(PRINT_JSON, "errors", NULL, s->tx_errors);
-               print_uint(PRINT_JSON, "dropped", NULL, s->tx_dropped);
-               print_uint(PRINT_JSON,
+               print_u64(PRINT_JSON, "bytes", NULL, s->tx_bytes);
+               print_u64(PRINT_JSON, "packets", NULL, s->tx_packets);
+               print_u64(PRINT_JSON, "errors", NULL, s->tx_errors);
+               print_u64(PRINT_JSON, "dropped", NULL, s->tx_dropped);
+               print_u64(PRINT_JSON,
                           "carrier_errors",
                           NULL, s->tx_carrier_errors);
-               print_uint(PRINT_JSON, "collisions", NULL, s->collisions);
+               print_u64(PRINT_JSON, "collisions", NULL, s->collisions);
                if (s->tx_compressed)
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "compressed", NULL, s->tx_compressed);
 
                /* TX error stats */
                if (show_stats > 1) {
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "aborted_errors",
                                   NULL, s->tx_aborted_errors);
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "fifo_errors",
                                   NULL, s->tx_fifo_errors);
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "window_errors",
                                   NULL, s->tx_window_errors);
-                       print_uint(PRINT_JSON,
+                       print_u64(PRINT_JSON,
                                   "heartbeat_errors",
                                   NULL, s->tx_heartbeat_errors);
                        if (carrier_changes)
-                               print_uint(PRINT_JSON, "carrier_changes", NULL,
+                               print_u64(PRINT_JSON, "carrier_changes", NULL,
                                           rta_getattr_u32(carrier_changes));
                }
 
diff --git a/ip/ipmacsec.c b/ip/ipmacsec.c
index 38ec7136..4e4e158e 100644
--- a/ip/ipmacsec.c
+++ b/ip/ipmacsec.c
@@ -640,7 +640,7 @@ static void print_attrs(struct rtattr *attrs[])
        }
 }
 
-static __u64 getattr_uint(struct rtattr *stat)
+static __u64 getattr_u64(struct rtattr *stat)
 {
        switch (RTA_PAYLOAD(stat)) {
        case sizeof(__u64):
@@ -681,7 +681,7 @@ static void print_fp_stats(const char *prefix,
 
                pad = strlen(names[i]) + 1;
                if (stats[i])
-                       printf("%*llu", pad, getattr_uint(stats[i]));
+                       printf("%*llu", pad, getattr_u64(stats[i]));
                else
                        printf("%*c", pad, '-');
        }
@@ -697,8 +697,8 @@ static void print_json_stats(const char *names[], unsigned 
int num,
                if (!names[i] || !stats[i])
                        continue;
 
-               print_uint(PRINT_JSON, names[i],
-                          NULL, getattr_uint(stats[i]));
+               print_u64(PRINT_JSON, names[i],
+                          NULL, getattr_u64(stats[i]));
        }
 }
 
diff --git a/ip/ipmroute.c b/ip/ipmroute.c
index 59c5b771..cdb4d898 100644
--- a/ip/ipmroute.c
+++ b/ip/ipmroute.c
@@ -182,12 +182,12 @@ int print_mroute(const struct sockaddr_nl *who, struct 
nlmsghdr *n, void *arg)
                struct rta_mfc_stats *mfcs = RTA_DATA(tb[RTA_MFC_STATS]);
 
                print_string(PRINT_FP, NULL, "%s", _SL_);
-               print_uint(PRINT_ANY, "packets", "  %"PRIu64" packets,",
+               print_u64(PRINT_ANY, "packets", "  %"PRIu64" packets,",
                           mfcs->mfcs_packets);
-               print_uint(PRINT_ANY, "bytes", " %"PRIu64" bytes", 
mfcs->mfcs_bytes);
+               print_u64(PRINT_ANY, "bytes", " %"PRIu64" bytes", 
mfcs->mfcs_bytes);
 
                if (mfcs->mfcs_wrong_if)
-                       print_uint(PRINT_ANY, "wrong_if",
+                       print_u64(PRINT_ANY, "wrong_if",
                                   ", %"PRIu64" arrived on wrong iif.",
                                   mfcs->mfcs_wrong_if);
        }
diff --git a/ip/ipntable.c b/ip/ipntable.c
index 82f40f87..4fae181d 100644
--- a/ip/ipntable.c
+++ b/ip/ipntable.c
@@ -392,7 +392,7 @@ static void print_ndtparams(struct rtattr *tpb[])
        if (tpb[NDTPA_REACHABLE_TIME]) {
                __u64 reachable = rta_getattr_u64(tpb[NDTPA_REACHABLE_TIME]);
 
-               print_uint(PRINT_ANY, "reachable",
+               print_u64(PRINT_ANY, "reachable",
                           "reachable %llu ", reachable);
        }
 
@@ -400,14 +400,14 @@ static void print_ndtparams(struct rtattr *tpb[])
                __u64 breachable
                        = rta_getattr_u64(tpb[NDTPA_BASE_REACHABLE_TIME]);
 
-               print_uint(PRINT_ANY, "base_reachable",
+               print_u64(PRINT_ANY, "base_reachable",
                           "base_reachable %llu ", breachable);
        }
 
        if (tpb[NDTPA_RETRANS_TIME]) {
                __u64 retrans = rta_getattr_u64(tpb[NDTPA_RETRANS_TIME]);
 
-               print_uint(PRINT_ANY, "retrans", "retrans %llu ", retrans);
+               print_u64(PRINT_ANY, "retrans", "retrans %llu ", retrans);
        }
 
        print_string(PRINT_FP, NULL, "%s    ", _SL_);
@@ -415,14 +415,14 @@ static void print_ndtparams(struct rtattr *tpb[])
        if (tpb[NDTPA_GC_STALETIME]) {
                __u64 gc_stale = rta_getattr_u64(tpb[NDTPA_GC_STALETIME]);
 
-               print_uint(PRINT_ANY, "gc_stale", "gc_stale %llu ", gc_stale);
+               print_u64(PRINT_ANY, "gc_stale", "gc_stale %llu ", gc_stale);
        }
 
        if (tpb[NDTPA_DELAY_PROBE_TIME]) {
                __u64 delay_probe
                        = rta_getattr_u64(tpb[NDTPA_DELAY_PROBE_TIME]);
 
-               print_uint(PRINT_ANY, "delay_probe",
+               print_u64(PRINT_ANY, "delay_probe",
                           "delay_probe %llu ", delay_probe);
        }
 
@@ -459,14 +459,14 @@ static void print_ndtparams(struct rtattr *tpb[])
        if (tpb[NDTPA_ANYCAST_DELAY]) {
                __u64 anycast_delay = rta_getattr_u64(tpb[NDTPA_ANYCAST_DELAY]);
 
-               print_uint(PRINT_ANY, "anycast_delay",
+               print_u64(PRINT_ANY, "anycast_delay",
                           "anycast_delay %llu ", anycast_delay);
        }
 
        if (tpb[NDTPA_PROXY_DELAY]) {
                __u64 proxy_delay = rta_getattr_u64(tpb[NDTPA_PROXY_DELAY]);
 
-               print_uint(PRINT_ANY, "proxy_delay",
+               print_u64(PRINT_ANY, "proxy_delay",
                           "proxy_delay %llu ", proxy_delay);
        }
 
@@ -479,7 +479,7 @@ static void print_ndtparams(struct rtattr *tpb[])
        if (tpb[NDTPA_LOCKTIME]) {
                __u64 locktime = rta_getattr_u64(tpb[NDTPA_LOCKTIME]);
 
-               print_uint(PRINT_ANY, "locktime", "locktime %llu ", locktime);
+               print_u64(PRINT_ANY, "locktime", "locktime %llu ", locktime);
        }
 
        print_string(PRINT_FP, NULL, "%s", _SL_);
@@ -490,31 +490,31 @@ static void print_ndtstats(const struct ndt_stats *ndts)
 
        print_string(PRINT_FP, NULL, "    stats ", NULL);
 
-       print_uint(PRINT_ANY, "allocs", "allocs %llu ", ndts->ndts_allocs);
-       print_uint(PRINT_ANY, "destroys", "destroys %llu ",
+       print_u64(PRINT_ANY, "allocs", "allocs %llu ", ndts->ndts_allocs);
+       print_u64(PRINT_ANY, "destroys", "destroys %llu ",
                   ndts->ndts_destroys);
-       print_uint(PRINT_ANY, "hash_grows", "hash_grows %llu ",
+       print_u64(PRINT_ANY, "hash_grows", "hash_grows %llu ",
                   ndts->ndts_hash_grows);
 
        print_string(PRINT_FP, NULL, "%s    ", _SL_);
 
-       print_uint(PRINT_ANY, "res_failed", "res_failed %llu ",
+       print_u64(PRINT_ANY, "res_failed", "res_failed %llu ",
                   ndts->ndts_res_failed);
-       print_uint(PRINT_ANY, "lookups", "lookups %llu ", ndts->ndts_lookups);
-       print_uint(PRINT_ANY, "hits", "hits %llu ", ndts->ndts_hits);
+       print_u64(PRINT_ANY, "lookups", "lookups %llu ", ndts->ndts_lookups);
+       print_u64(PRINT_ANY, "hits", "hits %llu ", ndts->ndts_hits);
 
        print_string(PRINT_FP, NULL, "%s    ", _SL_);
 
-       print_uint(PRINT_ANY, "rcv_probes_mcast", "rcv_probes_mcast %llu ",
+       print_u64(PRINT_ANY, "rcv_probes_mcast", "rcv_probes_mcast %llu ",
                   ndts->ndts_rcv_probes_mcast);
-       print_uint(PRINT_ANY, "rcv_probes_ucast", "rcv_probes_ucast %llu ",
+       print_u64(PRINT_ANY, "rcv_probes_ucast", "rcv_probes_ucast %llu ",
                   ndts->ndts_rcv_probes_ucast);
 
        print_string(PRINT_FP, NULL, "%s    ", _SL_);
 
-       print_uint(PRINT_ANY, "periodic_gc_runs", "periodic_gc_runs %llu ",
+       print_u64(PRINT_ANY, "periodic_gc_runs", "periodic_gc_runs %llu ",
                   ndts->ndts_periodic_gc_runs);
-       print_uint(PRINT_ANY, "forced_gc_runs", "forced_gc_runs %llu ",
+       print_u64(PRINT_ANY, "forced_gc_runs", "forced_gc_runs %llu ",
                   ndts->ndts_forced_gc_runs);
 
        print_string(PRINT_FP, NULL, "%s", _SL_);
@@ -607,7 +607,7 @@ static int print_ntable(const struct sockaddr_nl *who,
        if (tb[NDTA_GC_INTERVAL]) {
                __u64 gc_int = rta_getattr_u64(tb[NDTA_GC_INTERVAL]);
 
-               print_uint(PRINT_ANY, "gc_interval", "gc_int %llu ", gc_int);
+               print_u64(PRINT_ANY, "gc_interval", "gc_int %llu ", gc_int);
        }
 
        if (ret)
diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c
index cde9b3d2..46a212c8 100644
--- a/ip/iproute_lwtunnel.c
+++ b/ip/iproute_lwtunnel.c
@@ -273,7 +273,7 @@ static void print_encap_ip(FILE *fp, struct rtattr *encap)
        parse_rtattr_nested(tb, LWTUNNEL_IP_MAX, encap);
 
        if (tb[LWTUNNEL_IP_ID])
-               print_uint(PRINT_ANY, "id", "id %llu ",
+               print_u64(PRINT_ANY, "id", "id %llu ",
                           ntohll(rta_getattr_u64(tb[LWTUNNEL_IP_ID])));
 
        if (tb[LWTUNNEL_IP_SRC])
@@ -333,7 +333,7 @@ static void print_encap_ip6(FILE *fp, struct rtattr *encap)
        parse_rtattr_nested(tb, LWTUNNEL_IP6_MAX, encap);
 
        if (tb[LWTUNNEL_IP6_ID])
-               print_uint(PRINT_ANY, "id", "id %llu ",
+               print_u64(PRINT_ANY, "id", "id %llu ",
                            ntohll(rta_getattr_u64(tb[LWTUNNEL_IP6_ID])));
 
        if (tb[LWTUNNEL_IP6_SRC])
@@ -347,7 +347,7 @@ static void print_encap_ip6(FILE *fp, struct rtattr *encap)
                                   rt_addr_n2a_rta(AF_INET6, 
tb[LWTUNNEL_IP6_DST]));
 
        if (tb[LWTUNNEL_IP6_HOPLIMIT])
-               print_uint(PRINT_ANY, "hoplimit",
+               print_u64(PRINT_ANY, "hoplimit",
                           "hoplimit %u ",
                           rta_getattr_u8(tb[LWTUNNEL_IP6_HOPLIMIT]));
 
diff --git a/ip/iptuntap.c b/ip/iptuntap.c
index 6c5a7259..58996e6c 100644
--- a/ip/iptuntap.c
+++ b/ip/iptuntap.c
@@ -440,10 +440,10 @@ static int print_tuntap(const struct sockaddr_nl *who,
                           "ifname", "%s:", name);
        print_flags(flags);
        if (owner != -1)
-               print_uint(PRINT_ANY, "user",
+               print_u64(PRINT_ANY, "user",
                           " user %ld", owner);
        if (group != -1)
-               print_uint(PRINT_ANY, "group",
+               print_u64(PRINT_ANY, "group",
                           " group %ld", group);
 
        if (show_details) {
diff --git a/ip/tcp_metrics.c b/ip/tcp_metrics.c
index 72dc980c..ad3d6f36 100644
--- a/ip/tcp_metrics.c
+++ b/ip/tcp_metrics.c
@@ -139,19 +139,19 @@ static void print_tcp_metrics(struct rtattr *a)
 
                print_uint(PRINT_JSON, name, NULL, val);
                print_string(PRINT_FP, NULL, " %s ", name);
-               print_uint(PRINT_FP, NULL, "%lu", val);
+               print_uint(PRINT_FP, NULL, "%u", val);
        }
 
        if (rtt) {
                print_float(PRINT_JSON, "rtt", NULL,
                            (double)rtt / usec_per_sec);
-               print_uint(PRINT_FP, NULL,
+               print_u64(PRINT_FP, NULL,
                           " rtt %luus", rtt);
        }
        if (rttvar) {
                print_float(PRINT_JSON, "rttvar", NULL,
                            (double) rttvar / usec_per_sec);
-               print_uint(PRINT_FP, NULL,
+               print_u64(PRINT_FP, NULL,
                           " rttvar %luus", rttvar);
        }
 }
diff --git a/lib/json_print.c b/lib/json_print.c
index bda72933..5dc41bfa 100644
--- a/lib/json_print.c
+++ b/lib/json_print.c
@@ -116,8 +116,11 @@ void close_json_array(enum output_type type, const char 
*str)
                }                                                       \
        }
 _PRINT_FUNC(int, int);
+_PRINT_FUNC(s64, int64_t);
 _PRINT_FUNC(hu, unsigned short);
-_PRINT_FUNC(uint, uint64_t);
+_PRINT_FUNC(uint, unsigned int);
+_PRINT_FUNC(u64, uint64_t);
+_PRINT_FUNC(luint, unsigned long int);
 _PRINT_FUNC(lluint, unsigned long long int);
 _PRINT_FUNC(float, double);
 #undef _PRINT_FUNC
diff --git a/lib/json_writer.c b/lib/json_writer.c
index 0ad04218..aa9ce1c6 100644
--- a/lib/json_writer.c
+++ b/lib/json_writer.c
@@ -220,7 +220,12 @@ void jsonw_hu(json_writer_t *self, unsigned short num)
        jsonw_printf(self, "%hu", num);
 }
 
-void jsonw_uint(json_writer_t *self, uint64_t num)
+void jsonw_uint(json_writer_t *self, unsigned int num)
+{
+       jsonw_printf(self, "%u", num);
+}
+
+void jsonw_u64(json_writer_t *self, uint64_t num)
 {
        jsonw_printf(self, "%"PRIu64, num);
 }
@@ -230,12 +235,22 @@ void jsonw_xint(json_writer_t *self, uint64_t num)
        jsonw_printf(self, "%"PRIx64, num);
 }
 
+void jsonw_luint(json_writer_t *self, unsigned long int num)
+{
+       jsonw_printf(self, "%lu", num);
+}
+
 void jsonw_lluint(json_writer_t *self, unsigned long long int num)
 {
        jsonw_printf(self, "%llu", num);
 }
 
-void jsonw_int(json_writer_t *self, int64_t num)
+void jsonw_int(json_writer_t *self, int num)
+{
+       jsonw_printf(self, "%d", num);
+}
+
+void jsonw_s64(json_writer_t *self, int64_t num)
 {
        jsonw_printf(self, "%"PRId64, num);
 }
@@ -268,12 +283,18 @@ void jsonw_float_field_fmt(json_writer_t *self,
        jsonw_float_fmt(self, fmt, val);
 }
 
-void jsonw_uint_field(json_writer_t *self, const char *prop, uint64_t num)
+void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num)
 {
        jsonw_name(self, prop);
        jsonw_uint(self, num);
 }
 
+void jsonw_u64_field(json_writer_t *self, const char *prop, uint64_t num)
+{
+       jsonw_name(self, prop);
+       jsonw_u64(self, num);
+}
+
 void jsonw_xint_field(json_writer_t *self, const char *prop, uint64_t num)
 {
        jsonw_name(self, prop);
@@ -286,6 +307,14 @@ void jsonw_hu_field(json_writer_t *self, const char *prop, 
unsigned short num)
        jsonw_hu(self, num);
 }
 
+void jsonw_luint_field(json_writer_t *self,
+                       const char *prop,
+                       unsigned long int num)
+{
+       jsonw_name(self, prop);
+       jsonw_luint(self, num);
+}
+
 void jsonw_lluint_field(json_writer_t *self,
                        const char *prop,
                        unsigned long long int num)
@@ -294,12 +323,18 @@ void jsonw_lluint_field(json_writer_t *self,
        jsonw_lluint(self, num);
 }
 
-void jsonw_int_field(json_writer_t *self, const char *prop, int64_t num)
+void jsonw_int_field(json_writer_t *self, const char *prop, int num)
 {
        jsonw_name(self, prop);
        jsonw_int(self, num);
 }
 
+void jsonw_s64_field(json_writer_t *self, const char *prop, int64_t num)
+{
+       jsonw_name(self, prop);
+       jsonw_s64(self, num);
+}
+
 void jsonw_null_field(json_writer_t *self, const char *prop)
 {
        jsonw_name(self, prop);
-- 
2.17.0

Reply via email to