From f6ce23cbe32fdd17e2593c7bd37dfcba0e6e72cc Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 16 Jun 2021 11:45:49 +0200 Subject: [PATCH] metadata: add vargs format method for metadata values --- src/pipewire/impl-metadata.c | 32 ++++++++++++++++++++++++++++++++ src/pipewire/impl-metadata.h | 4 ++++ 2 files changed, 36 insertions(+) diff --git a/src/pipewire/impl-metadata.c b/src/pipewire/impl-metadata.c index 2a49ff1d3..6b7a2f548 100644 --- a/src/pipewire/impl-metadata.c +++ b/src/pipewire/impl-metadata.c @@ -570,3 +570,35 @@ int pw_impl_metadata_set_property(struct pw_impl_metadata *metadata, { return impl_set_property(metadata->metadata, subject, key, type, value); } + +SPA_EXPORT +int pw_impl_metadata_set_propertyf(struct pw_impl_metadata *metadata, + uint32_t subject, const char *key, const char *type, + const char *fmt, ...) +{ + va_list args; + int n = 0; + size_t size = 0; + char *p = NULL; + + va_start(args, fmt); + n = vsnprintf(p, size, fmt, args); + va_end(args); + if (n < 0) + return -errno; + + size = (size_t) n + 1; + p = malloc(size); + if (p == NULL) + return -errno; + + va_start(args, fmt); + n = vsnprintf(p, size, fmt, args); + va_end(args); + + if (n < 0) { + free(p); + return -errno; + } + return pw_impl_metadata_set_property(metadata, subject, key, type, p); +} diff --git a/src/pipewire/impl-metadata.h b/src/pipewire/impl-metadata.h index a2ceb0b94..4e3076668 100644 --- a/src/pipewire/impl-metadata.h +++ b/src/pipewire/impl-metadata.h @@ -99,6 +99,10 @@ int pw_impl_metadata_set_property(struct pw_impl_metadata *metadata, uint32_t subject, const char *key, const char *type, const char *value); +int pw_impl_metadata_set_propertyf(struct pw_impl_metadata *metadata, + uint32_t subject, const char *key, const char *type, + const char *fmt, ...) SPA_PRINTF_FUNC(5,6); + /** * \} */