((hw)->mmap_status->tstamp)
#endif /* DOC_HIDDEN */
+static inline int check_std_error(int error)
+{
+ switch (error) {
+ case -EAGAIN:
+ case -EPIPE:
+ case -ESTRPIPE:
+ case -ENXIO:
+ case -ENOSYS:
+ return 0;
+ }
+ return 1;
+}
struct timespec snd_pcm_hw_fast_tstamp(snd_pcm_t *pcm)
{
hw->sync_ptr->flags = flags;
err = ioctl((hw)->fd, SNDRV_PCM_IOCTL_SYNC_PTR, (hw)->sync_ptr);
if (err < 0) {
- (err) = -errno;
+ err = -errno;
SYSERR("SNDRV_PCM_IOCTL_SYNC_PTR failed");
return err;
}
}
if (ioctl(fd, SNDRV_PCM_IOCTL_DELAY, delayp) < 0) {
err = -errno;
- // SYSERR("SNDRV_PCM_IOCTL_DELAY failed");
+ if (check_std_error(err))
+ SYSERR("SNDRV_PCM_IOCTL_DELAY failed");
return err;
}
return 0;
} else {
if (ioctl(fd, SNDRV_PCM_IOCTL_HWSYNC) < 0) {
err = -errno;
- // SYSERR("SNDRV_PCM_IOCTL_HWSYNC failed");
+ if (check_std_error(err))
+ SYSERR("SNDRV_PCM_IOCTL_HWSYNC failed");
return err;
}
}
int err;
if (ioctl(hw->fd, SNDRV_PCM_IOCTL_DRAIN) < 0) {
err = -errno;
- if (err != -EAGAIN)
+ if (check_std_error(err))
SYSERR("SNDRV_PCM_IOCTL_DRAIN failed");
return err;
}
int err;
if (ioctl(hw->fd, SNDRV_PCM_IOCTL_PAUSE, enable) < 0) {
err = -errno;
- SYSERR("SNDRV_PCM_IOCTL_PAUSE failed");
+ if (check_std_error(err))
+ SYSERR("SNDRV_PCM_IOCTL_PAUSE failed");
return err;
}
return 0;
int err;
if (ioctl(hw->fd, SNDRV_PCM_IOCTL_REWIND, &frames) < 0) {
err = -errno;
- SYSERR("SNDRV_PCM_IOCTL_REWIND failed");
+ if (check_std_error(err))
+ SYSERR("SNDRV_PCM_IOCTL_REWIND failed");
return err;
}
return frames;
if (SNDRV_PROTOCOL_VERSION(2, 0, 4) <= hw->version) {
if (ioctl(hw->fd, SNDRV_PCM_IOCTL_FORWARD, &frames) < 0) {
err = -errno;
- SYSERR("SNDRV_PCM_IOCTL_FORWARD failed");
+ if (check_std_error(err))
+ SYSERR("SNDRV_PCM_IOCTL_FORWARD failed");
return err;
}
return frames;
int fd = hw->fd, err;
if (ioctl(fd, SNDRV_PCM_IOCTL_RESUME) < 0) {
err = -errno;
- if (err != -ENXIO && err != -ENOSYS)
+ if (check_std_error(err))
SYSERR("SNDRV_PCM_IOCTL_RESUME failed");
return err;
}