summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-10-27 18:30:20 +0100
committerThomas Haller <thaller@redhat.com>2015-11-02 13:57:02 +0100
commitf8fa4a0970464c0a6851dbc60d28c55aef81d403 (patch)
tree1242c1bdfac14d940a77bb006e5c870c53c631cf
parentb4cf41f9e7fe0e3b49ce80017d867a6eab46c30c (diff)
downloadNetworkManager-f8fa4a0970464c0a6851dbc60d28c55aef81d403.tar.gz
nmp-object: add virtual function for implementing nmp_object_to_string()
-rw-r--r--src/platform/nmp-object.c68
-rw-r--r--src/platform/nmp-object.h1
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);