]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
timer: query: use GFileError to report error
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sat, 14 Nov 2020 08:28:09 +0000 (17:28 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Sun, 15 Nov 2020 00:19:56 +0000 (09:19 +0900)
In design of ALSA timer, timer character device is not corresponding to
each substance of timer device. It's a kind of interface to query and
operate. Applications adds user instance and operates it to use its
services. Nevertheless, the interface has some functionality without
adding the user instances.

For the functionality, this library has global functions. The functions
are not relevant to the user instance, therefore it's not reasonable to
use error domain specific to the user instance.

This commit uses GFileError to report errors in the global functions.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/timer/query.c

index f9d506a3faf723fe5619f8dc02e0e7272582e18e..5612703790a57006223fefa0c59509fc89c93ebd 100644 (file)
@@ -17,9 +17,6 @@
 
 #include <libudev.h>
 
-#define TIMER_SYSNAME_TEMPLATE  "timer"
-#define SYSFS_SND_TIMER_NODE    "/sys/module/snd_timer/"
-
 /**
  * SECTION: query
  * @Title: Global functions in ALSATimer
 // For error handling.
 G_DEFINE_QUARK("alsatimer-error", alsatimer_error)
 
+#define TIMER_SYSNAME_TEMPLATE  "timer"
+#define SYSFS_SND_TIMER_NODE    "/sys/module/snd_timer/"
+
+#define generate_file_error(exception, errno, msg) \
+        g_set_error_literal(exception, G_FILE_ERROR, g_file_error_from_errno(errno), msg)
+
+#define generate_file_error_fmt(exception, errno, fmt, msg) \
+        g_set_error(exception, G_FILE_ERROR, g_file_error_from_errno(errno), fmt, msg)
+
 static bool check_existence(char *sysname, GError **error)
 {
     struct udev *ctx;
@@ -38,13 +44,13 @@ static bool check_existence(char *sysname, GError **error)
 
     ctx = udev_new();
     if (ctx == NULL) {
-        generate_error(error, errno);
+        generate_file_error(error, errno, "udev_new()");
         return false;
     }
 
     dev = udev_device_new_from_subsystem_sysname(ctx, "sound", sysname);
     if (dev == NULL) {
-        generate_error(error, errno);
+        generate_file_error(error, errno, "udev_device_new_from_subsystem_sysname()");
         result = false;
     } else {
         result = true;
@@ -102,14 +108,14 @@ void alsatimer_get_devnode(char **devnode, GError **error)
 
     ctx = udev_new();
     if (ctx == NULL) {
-        generate_error(error, errno);
+        generate_file_error(error, errno, "udev_new()");
         return;
     }
 
     dev = udev_device_new_from_subsystem_sysname(ctx, "sound",
                                                  TIMER_SYSNAME_TEMPLATE);
     if (dev == NULL) {
-        generate_error(error, ENODEV);
+        generate_file_error(error, ENODEV, "udev_device_new_from_subsystem_sysname()");
         udev_unref(ctx);
         return;
     }
@@ -118,7 +124,7 @@ void alsatimer_get_devnode(char **devnode, GError **error)
     if (node != NULL)
         *devnode = g_strdup(node);
     else
-        generate_error(error, ENODEV);
+        generate_file_error(error, ENODEV, "udev_device_get_devnode()");
 
     udev_device_unref(dev);
     udev_unref(ctx);
@@ -151,17 +157,20 @@ void alsatimer_get_device_id_list(GList **entries, GError **error)
         return;
 
     fd = open(devnode, O_RDONLY);
-    g_free(devnode);
     if (fd < 0) {
-        generate_error(error, errno);
+        generate_file_error_fmt(error, errno, "open(%s)", devnode);
+       g_free(devnode);
         return;
     }
+    g_free(devnode);
 
     while (true) {
         ALSATimerDeviceId *entry;
 
-        if (ioctl(fd, SNDRV_TIMER_IOCTL_NEXT_DEVICE, &id) < 0)
+        if (ioctl(fd, SNDRV_TIMER_IOCTL_NEXT_DEVICE, &id) < 0) {
+            generate_file_error(error, errno, "ioctl(SNDRV_TIMER_IOCTL_NEXT_DEVICE)");
             break;
+        }
         if (id.dev_class == SNDRV_TIMER_CLASS_NONE)
             break;
 
@@ -200,18 +209,19 @@ void alsatimer_get_device_info(ALSATimerDeviceId *device_id,
         return;
 
     fd = open(devnode, O_RDONLY);
-    g_free(devnode);
     if (fd < 0) {
-        generate_error(error, errno);
+        generate_file_error_fmt(error, errno, "open(%s)", devnode);
         return;
+       g_free(devnode);
     }
+    g_free(devnode);
 
     *device_info = g_object_new(ALSATIMER_TYPE_DEVICE_INFO, NULL);
     timer_device_info_refer_private(*device_info, &info);
 
     info->tid = *device_id;
     if (ioctl(fd, SNDRV_TIMER_IOCTL_GINFO, info) < 0) {
-        generate_error(error, errno);
+        generate_file_error(error, errno, "ioctl(SNDRV_TIMER_IOCTL_GINFO)");
         g_object_unref(*device_info);
     }
 
@@ -246,17 +256,18 @@ void alsatimer_get_device_status(ALSATimerDeviceId *device_id,
         return;
 
     fd = open(devnode, O_RDONLY);
-    g_free(devnode);
     if (fd < 0) {
-        generate_error(error, errno);
+        generate_file_error_fmt(error, errno, "open(%s)", devnode);
+       g_free(devnode);
         return;
     }
+    g_free(devnode);
 
     timer_device_status_refer_private(*device_status, &status);
 
     status->tid = *device_id;
     if (ioctl(fd, SNDRV_TIMER_IOCTL_GSTATUS, status) < 0) {
-        generate_error(error, errno);
+        generate_file_error(error, errno, "ioctl(SNDRV_TIMER_IOCTL_GSTATUS)");
         g_object_unref(*device_status);
     }
 
@@ -291,17 +302,18 @@ void alsatimer_set_device_params(ALSATimerDeviceId *device_id,
         return;
 
     fd = open(devnode, O_RDONLY);
-    g_free(devnode);
     if (fd < 0) {
-        generate_error(error, errno);
+        generate_file_error_fmt(error, errno, "open(%s)", devnode);
+       g_free(devnode);
         return;
     }
+    g_free(devnode);
 
     timer_device_params_refer_private((ALSATimerDeviceParams *)device_params,
                                       &params);
     params->tid = *device_id;
     if (ioctl(fd, SNDRV_TIMER_IOCTL_GPARAMS, params) < 0)
-        generate_error(error, errno);
+        generate_file_error(error, errno, "ioctl(SNDRV_TIMER_IOCTL_GPARAMS)");
 
     close(fd);
 }
@@ -320,21 +332,21 @@ static void timer_get_node_param_value(const char *param_name, char *buf,
 
     fd = open(literal, O_RDONLY);
     if (fd < 0) {
-        generate_error(error, errno);
+        generate_file_error_fmt(error, errno, "open(%s)", literal);
         return;
     }
 
     len = read(fd, buf, size);
     if (len < 0) {
-        generate_error(error, errno);
+        generate_file_error(error, errno, "read()");
         goto end;
     }
 
     v = strtol(buf, &term, 10);
     if (errno > 0)
-        generate_error(error, errno);
+        generate_file_error(error, errno, "strtol()");
     else if (*term != '\n')
-        generate_error(error, EIO);
+        generate_file_error(error, EIO, "strtol()");
     else
         *val = (int)v;
 end:
@@ -391,7 +403,7 @@ void alsatimer_get_tstamp_source(int *clock_id, GError **error)
         *clock_id = CLOCK_MONOTONIC;
         break;
     default:
-        generate_error(error, EPROTO);
+        generate_file_error(error, EPROTO, "timer_tstamp_monotonic");
         break;
     }
 end: