summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBushman, Jeff <JBushman@ciena.com>2012-05-16 11:50:25 -0400
committerThomas Graf <tgraf@redhat.com>2012-05-18 15:03:46 +0200
commitca883b61bc88498309afb82be9c8fa071febc741 (patch)
tree3543b47813bfde052dfca68cfdb00df5118f628c
parent24d577c93dc0b3382d45ca8b29d3226e182e0669 (diff)
downloadlibnl-ca883b61bc88498309afb82be9c8fa071febc741.tar.gz
Fix for dumping objects to a buffer instead of file descriptor
Attached is a patch to fix two problems with dumping objects to a buffer in= stead of a file descriptor. One was a problem in detecting the end of the buffer in the newline code. The other was a problem with clearing the whole buffer before printing each= object.
-rw-r--r--lib/cache.c3
-rw-r--r--lib/object.c3
-rw-r--r--lib/utils.c8
3 files changed, 9 insertions, 5 deletions
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);
}