From b6b6869aae39d3b082d995f25e30785795f35455 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Wed, 1 Apr 2020 18:13:28 +0900 Subject: [PATCH] seq: add global method to get sysname for ALSA sequencer Signed-off-by: Takashi Sakamoto --- src/seq/alsaseq.map | 2 ++ src/seq/query.c | 48 +++++++++++++++++++++++++++++++++++++++++++++ src/seq/query.h | 2 ++ 3 files changed, 52 insertions(+) diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index e2b35f1..0a34538 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -15,6 +15,8 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_specific_queue_id_get_type"; "alsaseq_port_subscribe_flag_get_type"; "alsaseq_query_subscribe_type_get_type"; + + "alsaseq_get_seq_sysname"; local: *; }; diff --git a/src/seq/query.c b/src/seq/query.c index 1f7ac73..db9ed3a 100644 --- a/src/seq/query.c +++ b/src/seq/query.c @@ -2,5 +2,53 @@ #include "query.h" #include "privates.h" +#include + +#include + // For error handling. G_DEFINE_QUARK("alsaseq-error", alsaseq_error) + +#define SEQ_SYSNAME "seq" + +/** + * alsaseq_get_seq_sysname: + * @sysname: (out): The sysname of ALSA Sequencer. + * @error: A #GError. + * + * Allocate sysname string for ALSA sequencer and return it when exists. + */ +void alsaseq_get_seq_sysname(gchar **sysname, GError **error) +{ + struct udev *ctx; + struct udev_device *dev; + const char *name; + + ctx = udev_new(); + if (ctx == NULL) { + generate_error(error, errno); + return; + } + + dev = udev_device_new_from_subsystem_sysname(ctx, "sound", SEQ_SYSNAME); + if (dev == NULL) { + generate_error(error, ENODEV); + udev_unref(ctx); + return; + } + + name = udev_device_get_sysname(dev); + if (name == NULL) { + generate_error(error, ENOENT); + udev_device_unref(dev); + udev_unref(ctx); + return; + } + + *sysname = strdup(name); + if (*sysname == NULL) + generate_error(error, ENOMEM); + + udev_device_unref(dev); + udev_unref(ctx); +} diff --git a/src/seq/query.h b/src/seq/query.h index 10b1f0d..98be374 100644 --- a/src/seq/query.h +++ b/src/seq/query.h @@ -7,6 +7,8 @@ G_BEGIN_DECLS +void alsaseq_get_seq_sysname(gchar **sysname, GError **error); + G_END_DECLS #endif -- 2.47.3