From: Takashi Sakamoto Date: Wed, 1 Apr 2020 09:13:28 +0000 (+0900) Subject: seq: add global method to get devnode string for ALSA Sequencer X-Git-Tag: v0.1.0~308 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=e5609cd6a9c9dca793adbf7f4192b1d983439703;p=alsa-gobject.git seq: add global method to get devnode string for ALSA Sequencer Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index 0a34538..00b636f 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -17,6 +17,7 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_query_subscribe_type_get_type"; "alsaseq_get_seq_sysname"; + "alsaseq_get_seq_devnode"; local: *; }; diff --git a/src/seq/query.c b/src/seq/query.c index db9ed3a..91356e4 100644 --- a/src/seq/query.c +++ b/src/seq/query.c @@ -52,3 +52,45 @@ void alsaseq_get_seq_sysname(gchar **sysname, GError **error) udev_device_unref(dev); udev_unref(ctx); } + +/** + * alsaseq_get_seq_devnode: + * @devnode: (out): The devnode of ALSA Sequencer. + * @error: A #GError. + * + * Allocate devnode string for ALSA Sequencer and return it when exists. + */ +void alsaseq_get_seq_devnode(gchar **devnode, GError **error) +{ + struct udev *ctx; + struct udev_device *dev; + const char *node; + + 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; + } + + node = udev_device_get_devnode(dev); + if (node == NULL) { + generate_error(error, ENODEV); + udev_device_unref(dev); + udev_unref(ctx); + return; + } + + *devnode = strdup(node); + if (*devnode == 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 98be374..1f428f4 100644 --- a/src/seq/query.h +++ b/src/seq/query.h @@ -9,6 +9,8 @@ G_BEGIN_DECLS void alsaseq_get_seq_sysname(gchar **sysname, GError **error); +void alsaseq_get_seq_devnode(gchar **devnode, GError **error); + G_END_DECLS #endif