diff options
author | Thomas Haller <thaller@redhat.com> | 2015-10-27 18:30:20 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-11-02 13:57:02 +0100 |
commit | f8fa4a0970464c0a6851dbc60d28c55aef81d403 (patch) | |
tree | 1242c1bdfac14d940a77bb006e5c870c53c631cf | |
parent | b4cf41f9e7fe0e3b49ce80017d867a6eab46c30c (diff) | |
download | NetworkManager-f8fa4a0970464c0a6851dbc60d28c55aef81d403.tar.gz |
nmp-object: add virtual function for implementing nmp_object_to_string()
-rw-r--r-- | src/platform/nmp-object.c | 68 | ||||
-rw-r--r-- | src/platform/nmp-object.h | 1 |
2 files changed, 36 insertions, 33 deletions
diff --git a/src/platform/nmp-object.c b/src/platform/nmp-object.c index c42008a1ec..1eec649320 100644 --- a/src/platform/nmp-object.c +++ b/src/platform/nmp-object.c @@ -380,23 +380,17 @@ nmp_object_to_string (const NMPObject *obj, NMPObjectToStringMode to_string_mode { const NMPClass *klass; char buf2[sizeof (_nm_utils_to_string_buffer)]; - char buf3[sizeof (_nm_utils_to_string_buffer)]; - char buf4[sizeof (_nm_utils_to_string_buffer)]; - - if (!buf) { - buf = _nm_utils_to_string_buffer; - buf_size = sizeof (_nm_utils_to_string_buffer); - } - if (!obj) { - g_strlcpy (buf, "(null)", buf_size); + if (!nm_utils_to_string_buffer_init_null (obj, &buf, &buf_size)) return buf; - } g_return_val_if_fail (NMP_OBJECT_IS_VALID (obj), NULL); klass = NMP_OBJECT_GET_CLASS (obj); + if (klass->cmd_obj_to_string) + return klass->cmd_obj_to_string (obj, to_string_mode, buf, buf_size); + switch (to_string_mode) { case NMP_OBJECT_TO_STRING_ID: if (!klass->cmd_plobj_to_string_id) { @@ -405,38 +399,45 @@ nmp_object_to_string (const NMPObject *obj, NMPObjectToStringMode to_string_mode } return klass->cmd_plobj_to_string_id (&obj->object, buf, buf_size); case NMP_OBJECT_TO_STRING_ALL: - NMP_OBJECT_GET_CLASS (obj)->cmd_plobj_to_string (&obj->object, buf2, sizeof (buf2)); + g_snprintf (buf, buf_size, + "[%s,%p,%d,%ccache,%calive,%cvisible; %s]", + klass->obj_type_name, obj, obj->_ref_count, + obj->is_cached ? '+' : '-', + nmp_object_is_alive (obj) ? '+' : '-', + nmp_object_is_visible (obj) ? '+' : '-', + NMP_OBJECT_GET_CLASS (obj)->cmd_plobj_to_string (&obj->object, buf2, sizeof (buf2))); + return buf; + case NMP_OBJECT_TO_STRING_PUBLIC: + NMP_OBJECT_GET_CLASS (obj)->cmd_plobj_to_string (&obj->object, buf, buf_size); + return buf; + default: + g_return_val_if_reached ("ERROR"); + } +} - if (NMP_OBJECT_GET_TYPE (obj) == NMP_OBJECT_TYPE_LINK) { - g_snprintf (buf3, sizeof (buf3), - ",%cin-nl,%p", - obj->_link.netlink.is_in_netlink ? '+' : '-', - obj->_link.udev.device); - if (obj->_link.netlink.lnk) { - char b[sizeof (_nm_utils_to_string_buffer)]; - - g_snprintf (buf4, sizeof (buf4), - ", link:%s, %s", - NMP_OBJECT_GET_CLASS (obj->_link.netlink.lnk)->obj_type_name, - nmp_object_to_string (obj->_link.netlink.lnk, NMP_OBJECT_TO_STRING_PUBLIC, b, sizeof (b))); - } else - buf4[0] = '\0'; - } else { - buf3[0] = '\0'; - buf4[0] = '\0'; - } +static const char * +_vt_cmd_obj_to_string_link (const NMPObject *obj, NMPObjectToStringMode to_string_mode, char *buf, gsize buf_size) +{ + const NMPClass *klass = NMP_OBJECT_GET_CLASS (obj); + char buf2[sizeof (_nm_utils_to_string_buffer)]; + char buf3[sizeof (_nm_utils_to_string_buffer)]; + switch (to_string_mode) { + case NMP_OBJECT_TO_STRING_ID: + return klass->cmd_plobj_to_string_id (&obj->object, buf, buf_size); + case NMP_OBJECT_TO_STRING_ALL: g_snprintf (buf, buf_size, - "[%s,%p,%d,%ccache,%calive,%cvisible%s; %s%s]", + "[%s,%p,%d,%ccache,%calive,%cvisible,%cin-nl,%p; %s]", klass->obj_type_name, obj, obj->_ref_count, obj->is_cached ? '+' : '-', nmp_object_is_alive (obj) ? '+' : '-', nmp_object_is_visible (obj) ? '+' : '-', - buf3, buf2, buf4); + obj->_link.netlink.is_in_netlink ? '+' : '-', + obj->_link.udev.device, + nmp_object_to_string (obj, NMP_OBJECT_TO_STRING_PUBLIC, buf2, sizeof (buf2))); return buf; case NMP_OBJECT_TO_STRING_PUBLIC: - if ( NMP_OBJECT_GET_TYPE (obj) == NMP_OBJECT_TYPE_LINK - && obj->_link.netlink.lnk) { + if (obj->_link.netlink.lnk) { NMP_OBJECT_GET_CLASS (obj)->cmd_plobj_to_string (&obj->object, buf2, sizeof (buf2)); nmp_object_to_string (obj->_link.netlink.lnk, NMP_OBJECT_TO_STRING_PUBLIC, buf3, sizeof (buf3)); g_snprintf (buf, buf_size, @@ -1801,6 +1802,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = { .cmd_obj_dispose = _vt_cmd_obj_dispose_link, .cmd_obj_is_alive = _vt_cmd_obj_is_alive_link, .cmd_obj_is_visible = _vt_cmd_obj_is_visible_link, + .cmd_obj_to_string = _vt_cmd_obj_to_string_link, .cmd_plobj_id_copy = _vt_cmd_plobj_id_copy_link, .cmd_plobj_id_equal = _vt_cmd_plobj_id_equal_link, .cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_link, diff --git a/src/platform/nmp-object.h b/src/platform/nmp-object.h index be4b2b4190..e92fabcb1f 100644 --- a/src/platform/nmp-object.h +++ b/src/platform/nmp-object.h @@ -129,6 +129,7 @@ typedef struct { void (*cmd_obj_dispose) (NMPObject *obj); gboolean (*cmd_obj_is_alive) (const NMPObject *obj); gboolean (*cmd_obj_is_visible) (const NMPObject *obj); + const char *(*cmd_obj_to_string) (const NMPObject *obj, NMPObjectToStringMode to_string_mode, char *buf, gsize buf_size); /* functions that operate on NMPlatformObject */ void (*cmd_plobj_id_copy) (NMPlatformObject *dst, const NMPlatformObject *src); |