diff --git a/src/examples/media-session/alsa-monitor.c b/src/examples/media-session/alsa-monitor.c index 668bb7ba9..22b857950 100644 --- a/src/examples/media-session/alsa-monitor.c +++ b/src/examples/media-session/alsa-monitor.c @@ -203,27 +203,6 @@ static const struct sm_object_methods node_methods = { .release = node_release, }; -static SPA_PRINTF_FUNC(4,5) char *sanitize_nick(char *name, int size, - char sub, const char *fmt, ...) -{ - char *p; - va_list varargs; - - va_start(varargs, fmt); - if (vsnprintf(name, size, fmt, varargs) < 0) - return NULL; - va_end(varargs); - - for (p = name; *p; p++) { - switch(*p) { - case ':': - *p = sub; - break; - } - } - return name; -} - static struct node *alsa_create_node(struct device *device, uint32_t id, const struct spa_device_object_info *info) { @@ -231,7 +210,7 @@ static struct node *alsa_create_node(struct device *device, uint32_t id, struct impl *impl = device->impl; int res; const char *dev, *subdev, *stream, *profile, *profile_desc, *rules; - char name[1024]; + char tmp[1024]; int i, priority; pw_log_debug("new node %u", id); @@ -312,7 +291,8 @@ static struct node *alsa_create_node(struct device *device, uint32_t id, s = pw_properties_get(device->props, "alsa.card_name"); pw_properties_set(node->props, PW_KEY_NODE_NICK, - sanitize_nick(name, sizeof(name), ' ', "%s", s)); + sm_media_session_sanitize_description(tmp, sizeof(tmp), + ' ', "%s", s)); } if (pw_properties_get(node->props, SPA_KEY_NODE_NAME) == NULL) { @@ -324,7 +304,7 @@ static struct node *alsa_create_node(struct device *device, uint32_t id, devname += 10; pw_properties_set(node->props, SPA_KEY_NODE_NAME, - sm_media_session_sanitize_name(name, sizeof(name), + sm_media_session_sanitize_name(tmp, sizeof(tmp), '_', "%s.%s.%s", node->direction == PW_DIRECTION_OUTPUT ? "alsa_input" : "alsa_output", devname, profile)); @@ -337,7 +317,7 @@ static struct node *alsa_create_node(struct device *device, uint32_t id, break; pw_properties_set(node->props, SPA_KEY_NODE_NAME, - sm_media_session_sanitize_name(name, sizeof(name), + sm_media_session_sanitize_name(tmp, sizeof(tmp), '_', "%s.%s.%s.%d", node->direction == PW_DIRECTION_OUTPUT ? "alsa_input" : "alsa_output", devname, profile, i)); @@ -356,17 +336,21 @@ static struct node *alsa_create_node(struct device *device, uint32_t id, name = dev; if (profile_desc != NULL) { - pw_properties_setf(node->props, PW_KEY_NODE_DESCRIPTION, "%s %s", - desc, profile_desc); + pw_properties_set(node->props, PW_KEY_NODE_DESCRIPTION, + sm_media_session_sanitize_description(tmp, sizeof(tmp), + ' ', "%s %s", desc, profile_desc)); } else if (strcmp(subdev, "0")) { - pw_properties_setf(node->props, PW_KEY_NODE_DESCRIPTION, "%s (%s %s)", - desc, name, subdev); + pw_properties_set(node->props, PW_KEY_NODE_DESCRIPTION, + sm_media_session_sanitize_description(tmp, sizeof(tmp), + ' ', "%s (%s %s)", desc, name, subdev)); } else if (strcmp(dev, "0")) { - pw_properties_setf(node->props, PW_KEY_NODE_DESCRIPTION, "%s (%s)", - desc, name); + pw_properties_set(node->props, PW_KEY_NODE_DESCRIPTION, + sm_media_session_sanitize_description(tmp, sizeof(tmp), + ' ', "%s (%s)", desc, name)); } else { - pw_properties_setf(node->props, PW_KEY_NODE_DESCRIPTION, "%s", - desc); + pw_properties_set(node->props, PW_KEY_NODE_DESCRIPTION, + sm_media_session_sanitize_description(tmp, sizeof(tmp), + ' ', "%s", desc)); } } diff --git a/src/examples/media-session/bluez-monitor.c b/src/examples/media-session/bluez-monitor.c index f4be1af65..1bd6b689b 100644 --- a/src/examples/media-session/bluez-monitor.c +++ b/src/examples/media-session/bluez-monitor.c @@ -133,7 +133,7 @@ static struct node *bluez5_create_node(struct device *device, uint32_t id, int res; const char *prefix, *str, *profile, *rules; int priority; - char name[1024]; + char tmp[1024]; pw_log_debug("new node %u", id); @@ -160,7 +160,10 @@ static struct node *bluez5_create_node(struct device *device, uint32_t id, str = "bluetooth-device"; pw_properties_setf(node->props, PW_KEY_DEVICE_ID, "%d", device->device_id); - pw_properties_set(node->props, PW_KEY_NODE_DESCRIPTION, str); + + pw_properties_set(node->props, PW_KEY_NODE_DESCRIPTION, + sm_media_session_sanitize_description(tmp, sizeof(tmp), + ' ', "%s", str)); profile = pw_properties_get(node->props, SPA_KEY_API_BLUEZ5_PROFILE); if (profile == NULL) @@ -177,7 +180,7 @@ static struct node *bluez5_create_node(struct device *device, uint32_t id, prefix = info->factory_name; pw_properties_set(node->props, PW_KEY_NODE_NAME, - sm_media_session_sanitize_name(name, sizeof(name), + sm_media_session_sanitize_name(tmp, sizeof(tmp), '_', "%s.%s.%s", prefix, str, profile)); pw_properties_set(node->props, PW_KEY_FACTORY_NAME, info->factory_name); diff --git a/src/examples/media-session/media-session.c b/src/examples/media-session/media-session.c index 5dac20d41..b6921bee6 100644 --- a/src/examples/media-session/media-session.c +++ b/src/examples/media-session/media-session.c @@ -1823,6 +1823,26 @@ char *sm_media_session_sanitize_name(char *name, int size, char sub, const char return name; } +char *sm_media_session_sanitize_description(char *name, int size, char sub, const char *fmt, ...) +{ + char *p; + va_list varargs; + + va_start(varargs, fmt); + if (vsnprintf(name, size, fmt, varargs) < 0) + return NULL; + va_end(varargs); + + for (p = name; *p; p++) { + switch(*p) { + case ':': + *p = sub; + break; + } + } + return name; +} + static void monitor_core_done(void *data, uint32_t id, int seq) { struct impl *impl = data; diff --git a/src/examples/media-session/media-session.h b/src/examples/media-session/media-session.h index f3b85697d..b530e798d 100644 --- a/src/examples/media-session/media-session.h +++ b/src/examples/media-session/media-session.h @@ -302,6 +302,8 @@ int sm_media_session_match_rules(const char *rules, size_t size, char *sm_media_session_sanitize_name(char *name, int size, char sub, const char *fmt, ...) SPA_PRINTF_FUNC(4, 5); +char *sm_media_session_sanitize_description(char *name, int size, char sub, + const char *fmt, ...) SPA_PRINTF_FUNC(4, 5); #ifdef __cplusplus } diff --git a/src/examples/media-session/v4l2-monitor.c b/src/examples/media-session/v4l2-monitor.c index 66faea709..00b942152 100644 --- a/src/examples/media-session/v4l2-monitor.c +++ b/src/examples/media-session/v4l2-monitor.c @@ -128,7 +128,7 @@ static struct node *v4l2_create_node(struct device *dev, uint32_t id, struct impl *impl = dev->impl; int i, res; const char *prefix, *str, *d, *rules; - char name[1024]; + char tmp[1024]; pw_log_debug("new node %u", id); @@ -164,7 +164,7 @@ static struct node *v4l2_create_node(struct device *dev, uint32_t id, prefix = info->factory_name; pw_properties_set(node->props, PW_KEY_NODE_NAME, - sm_media_session_sanitize_name(name, sizeof(name), + sm_media_session_sanitize_name(tmp, sizeof(tmp), '_', "%s.%s", prefix, str)); for (i = 2; i <= 99; i++) { if ((d = pw_properties_get(node->props, PW_KEY_NODE_NAME)) == NULL) @@ -174,14 +174,17 @@ static struct node *v4l2_create_node(struct device *dev, uint32_t id, break; pw_properties_set(node->props, PW_KEY_NODE_NAME, - sm_media_session_sanitize_name(name, sizeof(name), + sm_media_session_sanitize_name(tmp, sizeof(tmp), '_', "%s.%s.%d", prefix, str, i)); } str = pw_properties_get(dev->props, SPA_KEY_DEVICE_DESCRIPTION); if (str == NULL) str = "v4l2-device"; - pw_properties_set(node->props, PW_KEY_NODE_DESCRIPTION, str); + + pw_properties_set(node->props, PW_KEY_NODE_DESCRIPTION, + sm_media_session_sanitize_description(tmp, sizeof(tmp), + ' ', "%s", str)); pw_properties_set(node->props, PW_KEY_FACTORY_NAME, info->factory_name);