From: Philippe Proulx Date: Wed, 29 Mar 2017 20:16:13 +0000 (-0400) Subject: Add user data for private port X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=a45a0b60b2e60c4e6fa987731742c38777126058;p=deliverable%2Fbabeltrace.git Add user data for private port 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 --- diff --git a/include/babeltrace/graph/port-internal.h b/include/babeltrace/graph/port-internal.h index 85d9d76bf..3a2776749 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 2f0e49db6..1455369cd 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 f1c5d1758..bb72b163d 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; +}