#define SEQ_SYSNAME "seq"
+#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)
+
/**
* alsaseq_get_seq_sysname:
* @sysname: (out): The sysname of ALSA Sequencer.
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", SEQ_SYSNAME);
if (dev == NULL) {
- generate_error(error, ENODEV);
+ generate_file_error(error, errno, "udev_enumerate_new()");
udev_unref(ctx);
return;
}
name = udev_device_get_sysname(dev);
if (name == NULL) {
- generate_error(error, ENOENT);
+ generate_file_error(error, errno, "udev_enumerate_add_match_subsystem()");
udev_device_unref(dev);
udev_unref(ctx);
return;
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", SEQ_SYSNAME);
if (dev == NULL) {
- generate_error(error, ENODEV);
+ generate_file_error(error, errno, "udev_device_new_from_subsystem_sysname()");
udev_unref(ctx);
return;
}
node = udev_device_get_devnode(dev);
if (node == NULL) {
- generate_error(error, ENODEV);
+ generate_file_error(error, ENODEV, "udev_device_get_devnode()");
udev_device_unref(dev);
udev_unref(ctx);
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_object_unref(*system_info);
*system_info = NULL;
return;
}
if (ioctl(fd, SNDRV_SEQ_IOCTL_SYSTEM_INFO, info) < 0)
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(SYSTEM_INFO)");
close(fd);
if (*error != NULL) {
g_object_unref(*system_info);
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
return;
}
if (ioctl(fd, SNDRV_SEQ_IOCTL_CLIENT_ID, &my_id) < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(CLIENT_ID)");
close(fd);
return;
}
if (ioctl(fd, SNDRV_SEQ_IOCTL_SYSTEM_INFO, &system_info) < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(SYSTEM_INFO)");
close(fd);
return;
}
client_info.client = -1;
while (index < count) {
- if (ioctl(fd, SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT, &client_info) < 0)
+ if (ioctl(fd, SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT, &client_info) < 0) {
+ if (errno != ENOENT)
+ generate_file_error(error, errno, "ioctl(QUERY_NEXT_CLIENT)");
break;
+ }
if (client_info.client != my_id) {
list[index] = client_info.client;
++index;
}
}
+
close(fd);
- if (index != count) {
- generate_error(error, ENXIO);
+ if (*error != NULL) {
g_free(list);
return;
}
+ g_warn_if_fail(index == count);
+
*entries = list;
*entry_count = count;
}
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
g_object_unref(*client_info);
*client_info = NULL;
return;
info->client = client_id;
if (ioctl(fd, SNDRV_SEQ_IOCTL_GET_CLIENT_INFO, info) < 0)
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(GET_CLIENT_INFO)");
close(fd);
if (*error != NULL) {
g_object_unref(*client_info);
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
return;
}
client_info.client = client_id;
if (ioctl(fd, SNDRV_SEQ_IOCTL_GET_CLIENT_INFO, &client_info) < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(GET_CLIENT_INFO)");
close(fd);
return;
}
port_info.addr.port = -1;
while (index < count) {
if (ioctl(fd, SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT, &port_info) < 0) {
+ if (errno != ENOENT)
+ generate_file_error(error, errno, "ioctl(QUERY_NEXT_PORT)");
break;
}
}
close(fd);
- if (index != count) {
- generate_error(error, ENXIO);
+ if (*error != NULL) {
g_free(list);
return;
}
+ g_warn_if_fail(index == count);
+
*entries = list;
*entry_count = count;
}
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
g_object_unref(*port_info);
*port_info = NULL;
return;
info->addr.client = client_id;
info->addr.port = port_id;
if (ioctl(fd, SNDRV_SEQ_IOCTL_GET_PORT_INFO, info) < 0)
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(GET_PORT_INFO)");
close(fd);
if (*error != NULL) {
g_object_unref(*port_info);
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
return;
}
pool->client = client_id;
if (ioctl(fd, SNDRV_SEQ_IOCTL_GET_CLIENT_POOL, pool) < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(GET_CLIENT_POOL)");
close(fd);
g_object_unref(*client_pool);
return;
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
return;
}
query.type = query_type;
if (ioctl(fd, SNDRV_SEQ_IOCTL_QUERY_SUBS, &query) < 0) {
if (errno != ENOENT)
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(QUERY_SUBS)");
close(fd);
return;
}
++query.index;
if (ioctl(fd, SNDRV_SEQ_IOCTL_QUERY_SUBS, &query) < 0) {
if (errno != ENOENT)
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(QUERY_SUBS)");
break;
}
}
close(fd);
- if (index != count)
- generate_error(error, ENXIO);
if (*error != NULL) {
g_list_free_full(*entries, g_object_unref);
return;
}
+
+ g_warn_if_fail(index == count);
}
/**
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
return;
}
if (ioctl(fd, SNDRV_SEQ_IOCTL_SYSTEM_INFO, &info) < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(SYSTEM_INFO)");
close(fd);
return;
}
break;
}
close(fd);
- if (index != count) {
- generate_error(error, ENXIO);
- g_free(list);
- return;
- }
+
+ g_warn_if_fail(index == count);
*entries = list;
*entry_count = count;
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
return;
}
info->queue = queue_id;
if (ioctl(fd, SNDRV_SEQ_IOCTL_GET_QUEUE_INFO, info) < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(GET_QUEUE_INFO)");
close(fd);
g_object_unref(*queue_info);
return;
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
return;
}
strncpy(info->name, name, sizeof(info->name));
if (ioctl(fd, SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE, info) < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(GET_NAMED_QUEUE)");
close(fd);
g_object_unref(*queue_info);
return;
fd = open(devnode, O_RDONLY);
g_free(devnode);
if (fd < 0) {
- generate_error(error, errno);
+ generate_file_error(error, errno, "open()");
return;
}
status->queue = (int)queue_id;
if (ioctl(fd, SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS, status) < 0)
- generate_error(error, errno);
+ generate_file_error(error, errno, "ioctl(GET_QUEUE_STATUS)");
close(fd);
}