static const char *const err_msgs[] = {
[ALSATIMER_USER_INSTANCE_ERROR_TIMER_NOT_FOUND] = "The timer instance is not found",
+ [ALSATIMER_USER_INSTANCE_ERROR_NOT_ATTACHED] = "The timer instance is not attached to any timer device or the other instance",
};
#define generate_local_error(exception, code) \
timer_instance_info_refer_private(*instance_info, &info);
if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_INFO, info) < 0) {
- generate_syscall_error(error, errno, "ioctl(%s)", "INFO");
+ if (errno == EBADFD)
+ generate_local_error(error, ALSATIMER_USER_INSTANCE_ERROR_NOT_ATTACHED);
+ else
+ 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_syscall_error(error, errno, "ioctl(%s)", "PARAMS");
+ if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_PARAMS, params) < 0) {
+ if (errno == EBADFD)
+ generate_local_error(error, ALSATIMER_USER_INSTANCE_ERROR_NOT_ATTACHED);
+ else
+ generate_syscall_error(error, errno, "ioctl(%s)", "PARAMS");
+ }
}
/**
g_return_if_fail(ALSATIMER_IS_INSTANCE_STATUS(*instance_status));
timer_instance_status_refer_private(*instance_status, &status);
- if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_STATUS, status) < 0)
- generate_syscall_error(error, errno, "ioctl(%s)", "STATUS");
+ if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_STATUS, status) < 0) {
+ if (errno == EBADFD)
+ generate_local_error(error, ALSATIMER_USER_INSTANCE_ERROR_NOT_ATTACHED);
+ else
+ 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_syscall_error(error, errno, "ioctl(%s)", "START");
+ if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_START) < 0) {
+ if (errno == EBADFD)
+ generate_local_error(error, ALSATIMER_USER_INSTANCE_ERROR_NOT_ATTACHED);
+ else
+ 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_syscall_error(error, errno, "ioctl(%s)", "STOP");
+ if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_STOP) < 0) {
+ if (errno == EBADFD)
+ generate_local_error(error, ALSATIMER_USER_INSTANCE_ERROR_NOT_ATTACHED);
+ else
+ 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_syscall_error(error, errno, "ioctl(%s)", "PAUSE");
+ if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_PAUSE) < 0) {
+ if (errno == EBADFD)
+ generate_local_error(error, ALSATIMER_USER_INSTANCE_ERROR_NOT_ATTACHED);
+ else
+ 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_syscall_error(error, errno, "ioctl(%s)", "CONTINUE");
+ if (ioctl(priv->fd, SNDRV_TIMER_IOCTL_CONTINUE) < 0) {
+ if (errno == EBADFD)
+ generate_local_error(error, ALSATIMER_USER_INSTANCE_ERROR_NOT_ATTACHED);
+ else
+ generate_syscall_error(error, errno, "ioctl(%s)", "CONTINUE");
+ }
}