@@ -59,10 +59,12 @@ static void explain1(const char *arg)
#define MAX_DIST (16*1024)
/* Print values only if they are non-zero */
-static void __print_int_opt(const char *label_json, const char *label_fp,
- int val)
+static void __attribute__((format(printf, 2, 0)))
+__print_int_opt(const char *label_json, const char *label_fp, int val)
{
- print_int(PRINT_ANY, label_json, val ? label_fp : "", val);
+ print_int(PRINT_JSON, label_json, NULL, val);
+ if (val != 0)
+ print_int(PRINT_FP, NULL, label_fp, val);
}
#define PRINT_INT_OPT(label, val) \
__print_int_opt(label, " " label " %d", (val))
@@ -70,8 +72,8 @@ static void __print_int_opt(const char *label_json, const char *label_fp,
/* Time print prints normally with varying units, but for JSON prints
* in seconds (1ms vs 0.001).
*/
-static void __print_time64(const char *label_json, const char *label_fp,
- __u64 val)
+static void __attribute__((format(printf, 2, 0)))
+__print_time64(const char *label_json, const char *label_fp, __u64 val)
{
SPRINT_BUF(b1);
@@ -85,8 +87,8 @@ static void __print_time64(const char *label_json, const char *label_fp,
/* Percent print prints normally in percentage points, but for JSON prints
* an absolute value (1% vs 0.01).
*/
-static void __print_percent(const char *label_json, const char *label_fp,
- __u32 per)
+static void __attribute__((format(printf, 2, 0)))
+__print_percent(const char *label_json, const char *label_fp, __u32 per)
{
print_float(PRINT_FP, NULL, label_fp, (100. * per) / UINT32_MAX);
print_float(PRINT_JSON, label_json, NULL, (1. * per) / UINT32_MAX);
@@ -802,9 +804,10 @@ static int netem_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
rate64 = rate64 ? : rate->rate;
tc_print_rate(PRINT_ANY, "rate", " rate %s", rate64);
PRINT_INT_OPT("packetoverhead", rate->packet_overhead);
- print_uint(PRINT_ANY, "cellsize",
- rate->cell_size ? " cellsize %u" : "",
- rate->cell_size);
+
+ print_uint(PRINT_JSON, "cellsize", NULL, rate->cell_size);
+ if (rate->cell_size)
+ print_uint(PRINT_FP, NULL, " cellsize %u", rate->cell_size);
PRINT_INT_OPT("celloverhead", rate->cell_overhead);
close_json_object();
}
@@ -824,9 +827,13 @@ static int netem_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
close_json_object();
}
- print_bool(PRINT_ANY, "ecn", ecn ? " ecn " : "", ecn);
- print_luint(PRINT_ANY, "gap", qopt.gap ? " gap %lu" : "",
- (unsigned long)qopt.gap);
+ print_bool(PRINT_JSON, "ecn", NULL, ecn);
+ if (ecn)
+ print_bool(PRINT_FP, NULL, " ecn ", ecn);
+
+ print_luint(PRINT_JSON, "gap", NULL, qopt.gap);
+ if (qopt.gap)
+ print_luint(PRINT_FP, NULL, " gap %lu", qopt.gap);
return 0;
}
Netem is using empty format string to not print values. Clang complains about this hack so don't do it. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- tc/q_netem.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-)