]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: add global method to get sysname for ALSA sequencer
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 1 Apr 2020 09:13:28 +0000 (18:13 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Fri, 3 Apr 2020 13:06:25 +0000 (22:06 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/query.c
src/seq/query.h

index e2b35f16a68d5d04cd40ac19409d1f44a24bd06f..0a34538b206667571e149727032ec3b0aa3ea9f1 100644 (file)
@@ -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:
     *;
 };
index 1f7ac7336719cc42a7027120292e0e834a59553c..db9ed3ae29b904e4c62563e7a98ead3b4657d199 100644 (file)
@@ -2,5 +2,53 @@
 #include "query.h"
 #include "privates.h"
 
+#include <errno.h>
+
+#include <libudev.h>
+
 // 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);
+}
index 10b1f0d96f445b3034d16c162046509b55458a1d..98be3742e124e8b63cb3cce335e683531473fc37 100644 (file)
@@ -7,6 +7,8 @@
 
 G_BEGIN_DECLS
 
+void alsaseq_get_seq_sysname(gchar **sysname, GError **error);
+
 G_END_DECLS
 
 #endif