From 703309f6cd0787494c9b8acf038a0b3746122c1e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 6 Feb 2019 11:38:12 +0100 Subject: [PATCH] spa: don't use constructor attribute to register factories --- spa/plugins/bluez5/bluez5-monitor.c | 10 +------- spa/plugins/bluez5/plugin.c | 27 +++++++--------------- spa/plugins/support/logger.c | 10 +------- spa/plugins/support/loop.c | 10 +------- spa/plugins/support/mapper.c | 10 +------- spa/plugins/support/meson.build | 20 ++++++++-------- spa/plugins/support/plugin.c | 36 ++++++++++++++--------------- 7 files changed, 39 insertions(+), 84 deletions(-) diff --git a/spa/plugins/bluez5/bluez5-monitor.c b/spa/plugins/bluez5/bluez5-monitor.c index 140efa4d7..e82ac5a86 100644 --- a/spa/plugins/bluez5/bluez5-monitor.c +++ b/spa/plugins/bluez5/bluez5-monitor.c @@ -1252,7 +1252,7 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, return 1; } -static const struct spa_handle_factory spa_bluez5_monitor_factory = { +const struct spa_handle_factory spa_bluez5_monitor_factory = { SPA_VERSION_MONITOR, NAME, NULL, @@ -1260,11 +1260,3 @@ static const struct spa_handle_factory spa_bluez5_monitor_factory = { impl_init, impl_enum_interface_info, }; - -int spa_handle_factory_register(const struct spa_handle_factory *factory); - -static void reg(void) __attribute__ ((constructor)); -static void reg(void) -{ - spa_handle_factory_register(&spa_bluez5_monitor_factory); -} diff --git a/spa/plugins/bluez5/plugin.c b/spa/plugins/bluez5/plugin.c index 031385cf1..fa77907b4 100644 --- a/spa/plugins/bluez5/plugin.c +++ b/spa/plugins/bluez5/plugin.c @@ -22,21 +22,7 @@ #include -#define MAX_FACTORIES 16 - -static const struct spa_handle_factory *factories[MAX_FACTORIES]; -static int n_factories; - -int spa_handle_factory_register(const struct spa_handle_factory *factory) -{ - if (n_factories >= MAX_FACTORIES) { - fprintf(stderr, "too many factories\n"); - return -ENOMEM; - } - - factories[n_factories++] = factory; - return 0; -} +extern const struct spa_handle_factory spa_bluez5_monitor_factory; int spa_handle_factory_enum(const struct spa_handle_factory **factory, uint32_t *index) @@ -44,10 +30,13 @@ spa_handle_factory_enum(const struct spa_handle_factory **factory, uint32_t *ind spa_return_val_if_fail(factory != NULL, -EINVAL); spa_return_val_if_fail(index != NULL, -EINVAL); - if (*index >= n_factories) + switch (*index) { + case 0: + *factory = &spa_bluez5_monitor_factory; + break; + default: return 0; - - *factory = factories[(*index)++]; - + } + (*index)++; return 1; } diff --git a/spa/plugins/support/logger.c b/spa/plugins/support/logger.c index ce5deafd0..7e3103c7d 100644 --- a/spa/plugins/support/logger.c +++ b/spa/plugins/support/logger.c @@ -255,7 +255,7 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, return 1; } -static const struct spa_handle_factory logger_factory = { +const struct spa_handle_factory spa_support_logger_factory = { SPA_VERSION_HANDLE_FACTORY, NAME, NULL, @@ -263,11 +263,3 @@ static const struct spa_handle_factory logger_factory = { impl_init, impl_enum_interface_info, }; - -int spa_handle_factory_register(const struct spa_handle_factory *factory); - -static void reg(void) __attribute__ ((constructor)); -static void reg(void) -{ - spa_handle_factory_register(&logger_factory); -} diff --git a/spa/plugins/support/loop.c b/spa/plugins/support/loop.c index 8abf4bc28..1c770a16b 100644 --- a/spa/plugins/support/loop.c +++ b/spa/plugins/support/loop.c @@ -776,7 +776,7 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, return 1; } -static const struct spa_handle_factory loop_factory = { +const struct spa_handle_factory spa_support_loop_factory = { SPA_VERSION_HANDLE_FACTORY, NAME, NULL, @@ -784,11 +784,3 @@ static const struct spa_handle_factory loop_factory = { impl_init, impl_enum_interface_info }; - -int spa_handle_factory_register(const struct spa_handle_factory *factory); - -static void reg(void) __attribute__ ((constructor)); -static void reg(void) -{ - spa_handle_factory_register(&loop_factory); -} diff --git a/spa/plugins/support/mapper.c b/spa/plugins/support/mapper.c index b1f5ba0ed..0498e00a0 100644 --- a/spa/plugins/support/mapper.c +++ b/spa/plugins/support/mapper.c @@ -202,7 +202,7 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, return 1; } -static const struct spa_handle_factory type_map_factory = { +const struct spa_handle_factory spa_support_type_map_factory = { SPA_VERSION_HANDLE_FACTORY, NAME, NULL, @@ -210,11 +210,3 @@ static const struct spa_handle_factory type_map_factory = { impl_init, impl_enum_interface_info, }; - -int spa_handle_factory_register(const struct spa_handle_factory *factory); - -static void reg(void) __attribute__ ((constructor)); -static void reg(void) -{ - spa_handle_factory_register(&type_map_factory); -} diff --git a/spa/plugins/support/meson.build b/spa/plugins/support/meson.build index 475e295f2..e1e751803 100644 --- a/spa/plugins/support/meson.build +++ b/spa/plugins/support/meson.build @@ -4,17 +4,17 @@ spa_support_sources = ['mapper.c', 'plugin.c'] spa_support_lib = shared_library('spa-support', - spa_support_sources, - include_directories : [ spa_inc], - dependencies : threads_dep, - install : true, - install_dir : '@0@/spa/support'.format(get_option('libdir'))) + spa_support_sources, + include_directories : [ spa_inc], + dependencies : threads_dep, + install : true, + install_dir : '@0@/spa/support'.format(get_option('libdir'))) spa_dbus_sources = ['dbus.c'] spa_dbus_lib = shared_library('spa-dbus', - spa_dbus_sources, - include_directories : [ spa_inc], - dependencies : dbus_dep, - install : true, - install_dir : '@0@/spa/support'.format(get_option('libdir'))) + spa_dbus_sources, + include_directories : [ spa_inc], + dependencies : dbus_dep, + install : true, + install_dir : '@0@/spa/support'.format(get_option('libdir'))) diff --git a/spa/plugins/support/plugin.c b/spa/plugins/support/plugin.c index 3cbd3da79..6abd64d75 100644 --- a/spa/plugins/support/plugin.c +++ b/spa/plugins/support/plugin.c @@ -22,31 +22,29 @@ #include -#define MAX_FACTORIES 16 +extern const struct spa_handle_factory spa_support_logger_factory; +extern const struct spa_handle_factory spa_support_loop_factory; +extern const struct spa_handle_factory spa_support_type_map_factory; -static const struct spa_handle_factory *factories[MAX_FACTORIES]; -static int n_factories; - -int spa_handle_factory_register(const struct spa_handle_factory *factory) -{ - if (n_factories < MAX_FACTORIES) - factories[n_factories++] = factory; - else { - fprintf(stderr, "too many factories\n"); - return -ENOMEM; - } - return 0; -} - -int +SPA_EXPORT int spa_handle_factory_enum(const struct spa_handle_factory **factory, uint32_t *index) { spa_return_val_if_fail(factory != NULL, -EINVAL); spa_return_val_if_fail(index != NULL, -EINVAL); - if (*index >= n_factories) + switch (*index) { + case 0: + *factory = &spa_support_logger_factory; + break; + case 1: + *factory = &spa_support_loop_factory; + break; + case 2: + *factory = &spa_support_type_map_factory; + break; + default: return 0; - - *factory = factories[(*index)++]; + } + (*index)++; return 1; }