From a45a0b60b2e60c4e6fa987731742c38777126058 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Wed, 29 Mar 2017 16:16:13 -0400 Subject: [PATCH] Add user data for private port MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit A private port belongs to a private component, so it's okay to set custom user data within a port. The user must make sure to release the private user data whatever happens. The easiest solution is to make a port's private data owned by the component's private data. Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- include/babeltrace/graph/port-internal.h | 1 + include/babeltrace/graph/private-port.h | 4 ++++ lib/component/port.c | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/include/babeltrace/graph/port-internal.h b/include/babeltrace/graph/port-internal.h index 85d9d76b..3a277674 100644 --- a/include/babeltrace/graph/port-internal.h +++ b/include/babeltrace/graph/port-internal.h @@ -38,6 +38,7 @@ struct bt_port { enum bt_port_type type; GString *name; struct bt_connection *connection; + void *user_data; }; static inline diff --git a/include/babeltrace/graph/private-port.h b/include/babeltrace/graph/private-port.h index 2f0e49db..1455369c 100644 --- a/include/babeltrace/graph/private-port.h +++ b/include/babeltrace/graph/private-port.h @@ -39,6 +39,10 @@ extern struct bt_private_component *bt_private_port_get_private_component( struct bt_private_port *private_port); extern int bt_private_port_remove_from_component( struct bt_private_port *private_port); +extern int bt_private_port_set_user_data( + struct bt_private_port *private_port, void *user_data); +extern void *bt_private_port_get_user_data( + struct bt_private_port *private_port); #ifdef __cplusplus } diff --git a/lib/component/port.c b/lib/component/port.c index f1c5d175..bb72b163 100644 --- a/lib/component/port.c +++ b/lib/component/port.c @@ -187,3 +187,26 @@ int bt_port_is_connected(struct bt_port *port) end: return ret; } + +int bt_private_port_set_user_data( + struct bt_private_port *private_port, void *user_data) +{ + int ret = 0; + + if (!private_port) { + ret = -1; + goto end; + } + + bt_port_from_private(private_port)->user_data = user_data; + +end: + return ret; +} + +void *bt_private_port_get_user_data( + struct bt_private_port *private_port) +{ + return private_port ? + bt_port_from_private(private_port)->user_data : NULL; +} -- 2.34.1