]> git.ipfire.org Git - thirdparty/libnl.git/commitdiff
Fix for dumping objects to a buffer instead of file descriptor
authorBushman, Jeff <JBushman@ciena.com>
Wed, 16 May 2012 15:50:25 +0000 (11:50 -0400)
committerThomas Graf <tgraf@redhat.com>
Fri, 18 May 2012 13:03:46 +0000 (15:03 +0200)
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.

lib/cache.c
lib/object.c
lib/utils.c

index 5cfae672290c37872913b31a01923af3175ee1b0..45a1a27130f7e0fa4b41709c6ebd99a9c8d9871a 100644 (file)
@@ -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;
index 760653508d9694dacd63d970aba270ce83d11f72..df1c963d03a23c4c4323b1659859ca4658999a0f 100644 (file)
@@ -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);
 }
 
index 5a35a535f2a0c6d2a2fe074a84870d8bf0ac70d8..36b6292fd47ff9c3b04a90bcb889289fcc95cf3a 100644 (file)
@@ -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);
 }