iproute: make clang happy

These are primarily fixes for "string is not string literal" warnings
/ errors (with -Werror -Wformat-nonliteral). This should be a no-op
change. I had to replace couple of print helper functions with the
code they call as it was becoming harder to eliminate these warnings,
however these helpers were used only at couple of places, so no
major change as such.

Signed-off-by: Mahesh Bandewar <maheshb@google.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
Mahesh Bandewar 2018-08-22 18:01:37 -07:00 committed by Stephen Hemminger
parent a5aaca9be2
commit 5d5586b058
8 changed files with 20 additions and 24 deletions

View File

@ -29,6 +29,7 @@ void jsonw_pretty(json_writer_t *self, bool on);
void jsonw_name(json_writer_t *self, const char *name); void jsonw_name(json_writer_t *self, const char *name);
/* Add value */ /* Add value */
__attribute__((format(printf, 2, 3)))
void jsonw_printf(json_writer_t *self, const char *fmt, ...); void jsonw_printf(json_writer_t *self, const char *fmt, ...);
void jsonw_string(json_writer_t *self, const char *value); void jsonw_string(json_writer_t *self, const char *value);
void jsonw_bool(json_writer_t *self, bool value); void jsonw_bool(json_writer_t *self, bool value);
@ -59,8 +60,6 @@ void jsonw_luint_field(json_writer_t *self, const char *prop,
unsigned long int num); unsigned long int num);
void jsonw_lluint_field(json_writer_t *self, const char *prop, void jsonw_lluint_field(json_writer_t *self, const char *prop,
unsigned long long int num); unsigned long long int num);
void jsonw_float_field_fmt(json_writer_t *self, const char *prop,
const char *fmt, double val);
/* Collections */ /* Collections */
void jsonw_start_object(json_writer_t *self); void jsonw_start_object(json_writer_t *self);

View File

@ -316,11 +316,14 @@ static void can_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
struct can_bittiming *bt = RTA_DATA(tb[IFLA_CAN_BITTIMING]); struct can_bittiming *bt = RTA_DATA(tb[IFLA_CAN_BITTIMING]);
if (is_json_context()) { if (is_json_context()) {
json_writer_t *jw;
open_json_object("bittiming"); open_json_object("bittiming");
print_int(PRINT_ANY, "bitrate", NULL, bt->bitrate); print_int(PRINT_ANY, "bitrate", NULL, bt->bitrate);
jsonw_float_field_fmt(get_json_writer(), jw = get_json_writer();
"sample_point", "%.3f", jsonw_name(jw, "sample_point");
(float) bt->sample_point / 1000.); jsonw_printf(jw, "%.3f",
(float) bt->sample_point / 1000);
print_int(PRINT_ANY, "tq", NULL, bt->tq); print_int(PRINT_ANY, "tq", NULL, bt->tq);
print_int(PRINT_ANY, "prop_seg", NULL, bt->prop_seg); print_int(PRINT_ANY, "prop_seg", NULL, bt->prop_seg);
print_int(PRINT_ANY, "phase_seg1", print_int(PRINT_ANY, "phase_seg1",
@ -415,12 +418,14 @@ static void can_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
RTA_DATA(tb[IFLA_CAN_DATA_BITTIMING]); RTA_DATA(tb[IFLA_CAN_DATA_BITTIMING]);
if (is_json_context()) { if (is_json_context()) {
json_writer_t *jw;
open_json_object("data_bittiming"); open_json_object("data_bittiming");
print_int(PRINT_JSON, "bitrate", NULL, dbt->bitrate); print_int(PRINT_JSON, "bitrate", NULL, dbt->bitrate);
jsonw_float_field_fmt(get_json_writer(), jw = get_json_writer();
"sample_point", jsonw_name(jw, "sample_point");
"%.3f", jsonw_printf(jw, "%.3f",
(float) dbt->sample_point / 1000.); (float) dbt->sample_point / 1000.);
print_int(PRINT_JSON, "tq", NULL, dbt->tq); print_int(PRINT_JSON, "tq", NULL, dbt->tq);
print_int(PRINT_JSON, "prop_seg", NULL, dbt->prop_seg); print_int(PRINT_JSON, "prop_seg", NULL, dbt->prop_seg);
print_int(PRINT_JSON, "phase_seg1", print_int(PRINT_JSON, "phase_seg1",

View File

@ -132,6 +132,7 @@ void set_color_palette(void)
is_dark_bg = 1; is_dark_bg = 1;
} }
__attribute__((format(printf, 3, 4)))
int color_fprintf(FILE *fp, enum color_attr attr, const char *fmt, ...) int color_fprintf(FILE *fp, enum color_attr attr, const char *fmt, ...)
{ {
int ret = 0; int ret = 0;

View File

@ -100,6 +100,7 @@ void close_json_array(enum output_type type, const char *str)
* functions handling different types * functions handling different types
*/ */
#define _PRINT_FUNC(type_name, type) \ #define _PRINT_FUNC(type_name, type) \
__attribute__((format(printf, 4, 0))) \
void print_color_##type_name(enum output_type t, \ void print_color_##type_name(enum output_type t, \
enum color_attr color, \ enum color_attr color, \
const char *key, \ const char *key, \

View File

@ -152,6 +152,7 @@ void jsonw_name(json_writer_t *self, const char *name)
putc(' ', self->out); putc(' ', self->out);
} }
__attribute__((format(printf, 2, 3)))
void jsonw_printf(json_writer_t *self, const char *fmt, ...) void jsonw_printf(json_writer_t *self, const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -205,11 +206,6 @@ void jsonw_null(json_writer_t *self)
jsonw_printf(self, "null"); jsonw_printf(self, "null");
} }
void jsonw_float_fmt(json_writer_t *self, const char *fmt, double num)
{
jsonw_printf(self, fmt, num);
}
void jsonw_float(json_writer_t *self, double num) void jsonw_float(json_writer_t *self, double num)
{ {
jsonw_printf(self, "%g", num); jsonw_printf(self, "%g", num);
@ -274,15 +270,6 @@ void jsonw_float_field(json_writer_t *self, const char *prop, double val)
jsonw_float(self, val); jsonw_float(self, val);
} }
void jsonw_float_field_fmt(json_writer_t *self,
const char *prop,
const char *fmt,
double val)
{
jsonw_name(self, prop);
jsonw_float_fmt(self, fmt, val);
}
void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num) void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num)
{ {
jsonw_name(self, prop); jsonw_name(self, prop);

View File

@ -977,6 +977,7 @@ static int buf_update(int len)
} }
/* Append content to buffer as part of the current field */ /* Append content to buffer as part of the current field */
__attribute__((format(printf, 1, 2)))
static void out(const char *fmt, ...) static void out(const char *fmt, ...)
{ {
struct column *f = current_field; struct column *f = current_field;
@ -1094,7 +1095,7 @@ static void print_header(void)
{ {
while (!field_is_last(current_field)) { while (!field_is_last(current_field)) {
if (!current_field->disabled) if (!current_field->disabled)
out(current_field->header); out("%s", current_field->header);
field_next(); field_next();
} }
} }

View File

@ -277,6 +277,7 @@ static int flatten_tree(struct ematch *head, struct ematch *tree)
return count; return count;
} }
__attribute__((format(printf, 5, 6)))
int em_parse_error(int err, struct bstr *args, struct bstr *carg, int em_parse_error(int err, struct bstr *args, struct bstr *carg,
struct ematch_util *e, char *fmt, ...) struct ematch_util *e, char *fmt, ...)
{ {

View File

@ -102,6 +102,7 @@ static inline int parse_layer(const struct bstr *b)
return INT_MAX; return INT_MAX;
} }
__attribute__((format(printf, 5, 6)))
int em_parse_error(int err, struct bstr *args, struct bstr *carg, int em_parse_error(int err, struct bstr *args, struct bstr *carg,
struct ematch_util *, char *fmt, ...); struct ematch_util *, char *fmt, ...);
int print_ematch(FILE *, const struct rtattr *); int print_ematch(FILE *, const struct rtattr *);