Added start_threshold sanity checks

This commit is contained in:
Jaroslav Kysela 2004-02-06 09:38:49 +00:00
parent cf956e032b
commit 9505cbe5d8

View file

@ -819,6 +819,16 @@ int snd_pcm_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t *params)
{ {
int err; int err;
assert(pcm->setup); /* the hw_params must be set at first!!! */ assert(pcm->setup); /* the hw_params must be set at first!!! */
if (params->start_threshold <= pcm->buffer_size &&
params->start_threshold > (pcm->buffer_size / params->avail_min) * params->avail_min) {
SNDERR("snd_pcm_sw_params: params->avail_min problem for start_threshold");
return -EINVAL;
}
if (params->start_threshold <= pcm->buffer_size &&
params->start_threshold > (pcm->buffer_size / params->xfer_align) * params->xfer_align) {
SNDERR("snd_pcm_sw_params: params->xfer_align problem for start_threshold");
return -EINVAL;
}
err = pcm->ops->sw_params(pcm->op_arg, params); err = pcm->ops->sw_params(pcm->op_arg, params);
if (err < 0) if (err < 0)
return err; return err;
@ -6042,7 +6052,6 @@ snd_pcm_sframes_t snd_pcm_write_areas(snd_pcm_t *pcm, const snd_pcm_channel_area
if (err < 0) if (err < 0)
break; break;
goto _again; goto _again;
} }
if ((snd_pcm_uframes_t) avail > pcm->xfer_align) if ((snd_pcm_uframes_t) avail > pcm->xfer_align)
avail -= avail % pcm->xfer_align; avail -= avail % pcm->xfer_align;