]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
timer: add global method to get sysname for ALSA Timer
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 9 Feb 2020 03:20:53 +0000 (12:20 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 11 Feb 2020 04:28:18 +0000 (13:28 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/timer/alsatimer.map
src/timer/query.c
src/timer/query.h

index 9fd44200c19fe5fe6d1088dae420e7e1621d6aa5..5051462ce252bd268355481794782b6618519583 100644 (file)
@@ -6,6 +6,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsatimer_device_info_flag_get_type";
     "alsatimer_instance_param_flag_get_type";
     "alsatimer_event_type_get_type";
+
+    "alsatimer_get_sysname";
   local:
     *;
 };
index d112a5f23bdf296b235c8fa002808da754fb93f2..60741cfb807133d0914b69e6bb3f1e0a28af2237 100644 (file)
@@ -2,5 +2,65 @@
 #include "query.h"
 #include "privates.h"
 
+#include <stdbool.h>
+#include <errno.h>
+
+#include <libudev.h>
+
+#define TIMER_SYSNAME_TEMPLATE  "timer"
+
 // For error handling.
 G_DEFINE_QUARK("alsatimer-error", alsatimer_error)
+
+static bool check_existence(char *sysname, GError **error)
+{
+    struct udev *ctx;
+    struct udev_device *dev;
+    bool result;
+
+    ctx = udev_new();
+    if (ctx == NULL) {
+        generate_error(error, errno);
+        return false;
+    }
+
+    dev = udev_device_new_from_subsystem_sysname(ctx, "sound", sysname);
+    if (dev == NULL) {
+        generate_error(error, errno);
+        result = false;
+    } else {
+        result = true;
+    }
+    udev_device_unref(dev);
+
+    udev_unref(ctx);
+
+    return result;
+}
+
+/**
+ * alsatimer_get_sysname:
+ * @sysname: (out): The string for sysname of ALSA Timer.
+ * @error: A #GError.
+ *
+ * Allocate sysname for ALSA Timer and return it when it exists.
+ */
+void alsatimer_get_sysname(char **sysname, GError **error)
+{
+    char *name;
+
+    g_return_if_fail(sysname != NULL);
+
+    name = strdup(TIMER_SYSNAME_TEMPLATE);
+    if (name == NULL) {
+        generate_error(error, ENOMEM);
+        return;
+    }
+
+    if (!check_existence(name, error)) {
+        g_free(name);
+        return;
+    }
+
+    *sysname = name;
+}
index ec3d9414ab0a96f2f183e9fd8190ded45f907745..bc2d12a44bfb7a705596c25641d4df9798b3e22f 100644 (file)
@@ -7,6 +7,8 @@
 
 G_BEGIN_DECLS
 
+void alsatimer_get_sysname(char **sysname, GError **error);
+
 G_END_DECLS
 
 #endif