*/
G_DEFINE_QUARK(alsatimer-user-instance-error-quark, alsatimer_user_instance_error)
+#define generate_syscall_error(exception, errno, fmt, arg) \
+ g_set_error(exception, ALSATIMER_USER_INSTANCE_ERROR, ALSATIMER_USER_INSTANCE_ERROR_FAILED, \
+ fmt" %d(%s)", arg, errno, strerror(errno))
+
typedef struct {
GSource src;
ALSATimerUserInstance *self;
// Remember the version of protocol currently used.
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_PVERSION, &proto_ver) < 0) {
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "PVERSION");
close(priv->fd);
priv->fd = -1;
return;
tread = (int)event_data_type;
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_TREAD, &tread) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "TREAD");
else
priv->event_data_type = event_data_type;
}
sel.id = *device_id;
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_SELECT, &sel) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "SELECT");
}
/**
sel.id.dev_sclass = slave_class;
sel.id.device = slave_id;
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_SELECT, &sel) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "SELECT");
}
/**
timer_instance_info_refer_private(*instance_info, &info);
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_INFO, info) < 0) {
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "INFO");
g_object_unref(*instance_info);
}
}
timer_instance_params_refer_private(*instance_params, ¶ms);
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_PARAMS, params) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "PARAMS");
}
/**
timer_instance_status_refer_private(*instance_status, &status);
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_STATUS, status) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "STATUS");
}
static gboolean timer_user_instance_check_src(GSource *gsrc)
g_return_if_fail(error == NULL || *error == NULL);
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_START) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "START");
}
/**
g_return_if_fail(error == NULL || *error == NULL);
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_STOP) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "STOP");
}
/**
g_return_if_fail(error == NULL || *error == NULL);
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_PAUSE) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "PAUSE");
}
/**
g_return_if_fail(error == NULL || *error == NULL);
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_CONTINUE) < 0)
- generate_error(error, errno);
+ generate_syscall_error(error, errno, "ioctl(%s)", "CONTINUE");
}