From 2dc8cacd9ab9672cbbcf563cbde02a0a8ace1f0a Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 27 Feb 2004 16:16:58 +0000 Subject: [PATCH] Added hwset flag and changed mmap_commit check code --- alsa/pcm.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/alsa/pcm.c b/alsa/pcm.c index ae0cde7..c067772 100644 --- a/alsa/pcm.c +++ b/alsa/pcm.c @@ -71,6 +71,7 @@ typedef struct { } oss_dsp_stream_t; typedef struct { + int hwset; unsigned int channels; unsigned int rate; unsigned int oss_format; @@ -391,9 +392,11 @@ static int oss_dsp_sw_params(oss_dsp_t *dsp) static int oss_dsp_params(oss_dsp_t *dsp) { int err; + dsp->hwset = 0; err = oss_dsp_hw_params(dsp); if (err < 0) return err; + dsp->hwset = 1; err = oss_dsp_sw_params(dsp); if (err < 0) return err; @@ -725,11 +728,10 @@ static void oss_dsp_mmap_update(oss_dsp_t *dsp, snd_pcm_stream_t stream, dsp->channels, frames, dsp->format); err = snd_pcm_mmap_commit(pcm, ofs, frames); - assert(err == (snd_pcm_sframes_t) frames); if (err < 0) break; - size -= frames; - str->alsa.appl_ptr += frames; + size -= err; + str->alsa.appl_ptr += err; str->alsa.appl_ptr %= str->alsa.boundary; } break; @@ -764,6 +766,10 @@ int lib_oss_pcm_ioctl(int fd, unsigned long cmd, ...) { int k; DEBUG("SNDCTL_DSP_RESET)\n"); + if (!dsp->hwset) { + errno = -EIO; + return -1; + } result = 0; for (k = 0; k < 2; ++k) { str = &dsp->streams[k]; @@ -787,6 +793,10 @@ int lib_oss_pcm_ioctl(int fd, unsigned long cmd, ...) { int k; DEBUG("SNDCTL_DSP_SYNC)\n"); + if (!dsp->hwset) { + errno = -EIO; + return -1; + } result = 0; for (k = 0; k < 2; ++k) { str = &dsp->streams[k]; -- 2.47.1