From c6bfb82645c36640dbdb538b8b2db87f486b26ef Mon Sep 17 00:00:00 2001 From: Abramo Bagnara Date: Tue, 3 Oct 2000 09:15:50 +0000 Subject: [PATCH] Safer params implementation --- src/pcm/pcm_plug.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/pcm/pcm_plug.c b/src/pcm/pcm_plug.c index d1f78932..ac921b30 100644 --- a/src/pcm/pcm_plug.c +++ b/src/pcm/pcm_plug.c @@ -498,6 +498,7 @@ static int snd_pcm_plug_params(snd_pcm_t *pcm, snd_pcm_params_t *params) memset(&slave_info, 0, sizeof(slave_info)); err = snd_pcm_params_info(slave, &slave_info); + assert(err > 0); if (err < 0) return err; @@ -514,11 +515,22 @@ static int snd_pcm_plug_params(snd_pcm_t *pcm, snd_pcm_params_t *params) } slave_format->sfmt = slave_fmt; } + slave_info.req_mask |= SND_PCM_PARAMS_SFMT; + err = snd_pcm_params_info(slave, &slave_info); + assert(err > 0); + if (err < 0) + return err; if (format->channels < slave_info.min_channels) slave_format->channels = slave_info.min_channels; else if (format->channels > slave_info.max_channels) slave_format->channels = slave_info.max_channels; + slave_info.req_mask |= SND_PCM_PARAMS_CHANNELS; + err = snd_pcm_params_info(slave, &slave_info); + assert(err > 0); + if (err < 0) + return err; + srate = snd_pcm_plug_slave_rate(format->rate, &slave_info); if (srate < 0) { @@ -527,14 +539,11 @@ static int snd_pcm_plug_params(snd_pcm_t *pcm, snd_pcm_params_t *params) return srate; } slave_format->rate = srate; - - slave_info.req_mask = ~0; + slave_info.req_mask |= SND_PCM_PARAMS_RATE; err = snd_pcm_params_info(slave, &slave_info); - if (err < 0) { - params->fail_mask = slave_info.req.fail_mask; - params->fail_reason = slave_info.req.fail_reason; + assert(err > 0); + if (err < 0) return err; - } if (slave_format->rate - slave_info.min_rate < slave_info.max_rate - slave_format->rate) slave_format->rate = slave_info.min_rate; -- 2.47.1