diff --git a/libsndio/sio_oss.c b/libsndio/sio_oss.c index 4b32f4a..c44ff60 100644 --- a/libsndio/sio_oss.c +++ b/libsndio/sio_oss.c @@ -398,13 +398,25 @@ sio_oss_setpar(struct sio_hdl *sh, struct sio_par *par) struct sio_oss_hdl *hdl = (struct sio_oss_hdl *)sh; unsigned int i, round, bufsz; int frag_max, frag_shift, frag_count, frag; + unsigned int le, sig, msb; + + le = par->le; + sig = par->sig; + msb = par->msb; + + if (le == ~0U) + le = 0; + if (sig == ~0U) + sig = 0; + if (msb == ~0U) + msb = 0; hdl->fmt = AFMT_S16_LE; for (i = 0; i < sizeof(formats)/sizeof(formats[0]); i++) { if (formats[i].bits == par->bits && - formats[i].le == par->le && - formats[i].sig == par->sig && - formats[i].msb == par->msb) { + formats[i].le == le && + formats[i].sig == sig && + formats[i].msb == msb) { hdl->fmt = formats[i].fmt; break; }