diff --git a/lib/cache.c b/lib/cache.c index 5cfae67..45a1a27 100644 --- a/lib/cache.c +++ b/lib/cache.c @@ -929,6 +929,9 @@ void nl_cache_dump_filter(struct nl_cache *cache, if (!ops->oo_dump[type]) return; + if (params->dp_buf) + memset(params->dp_buf, 0, params->dp_buflen); + nl_list_for_each_entry(obj, &cache->c_items, ce_list) { if (filter && !nl_object_match_filter(obj, filter)) continue; diff --git a/lib/object.c b/lib/object.c index 7606535..df1c963 100644 --- a/lib/object.c +++ b/lib/object.c @@ -259,6 +259,9 @@ int nl_object_is_marked(struct nl_object *obj) */ void nl_object_dump(struct nl_object *obj, struct nl_dump_params *params) { + if (params->dp_buf) + memset(params->dp_buf, 0, params->dp_buflen); + dump_from_ops(obj, params); } diff --git a/lib/utils.c b/lib/utils.c index 5a35a53..36b6292 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -824,7 +824,7 @@ void nl_new_line(struct nl_dump_params *params) else if (params->dp_buf) strncat(params->dp_buf, " ", params->dp_buflen - - sizeof(params->dp_buf) - 1); + strlen(params->dp_buf) - 1); } } @@ -844,7 +844,8 @@ static void dump_one(struct nl_dump_params *parms, const char *fmt, parms->dp_cb(parms, buf); else strncat(parms->dp_buf, buf, - parms->dp_buflen - strlen(parms->dp_buf) - 1); + parms->dp_buflen - + strlen(parms->dp_buf) - 1); free(buf); } } @@ -1053,9 +1054,6 @@ void dump_from_ops(struct nl_object *obj, struct nl_dump_params *params) params->dp_pre_dump = 1; } - if (params->dp_buf) - memset(params->dp_buf, 0, params->dp_buflen); - if (obj->ce_ops->oo_dump[type]) obj->ce_ops->oo_dump[type](obj, params); }