diff options
| author | Cameron Grant <cg@FreeBSD.org> | 1999-09-04 17:08:30 +0000 |
|---|---|---|
| committer | Cameron Grant <cg@FreeBSD.org> | 1999-09-04 17:08:30 +0000 |
| commit | c5ad1e3a03342624c781b3d9d9fff13d1c317d48 (patch) | |
| tree | 5bf2d449c2bedc49bb5ab64f3b3b775df5d5ac84 /sys | |
| parent | 4a8480837ac824df3ece52a94c0e0e0ac96fbe21 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/dev/pcm/feeder.c | 15 | ||||
| -rw-r--r-- | sys/dev/sound/pcm/feeder.c | 15 |
2 files changed, 18 insertions, 12 deletions
diff --git a/sys/dev/pcm/feeder.c b/sys/dev/pcm/feeder.c index 7c6ebebff7cf..f579b298e292 100644 --- a/sys/dev/pcm/feeder.c +++ b/sys/dev/pcm/feeder.c @@ -108,12 +108,15 @@ static unsigned char u8_to_ulaw[] = { static int feed_root(pcm_feeder *feeder, u_int8_t *buffer, u_int32_t count, struct uio *stream) { - int ret, tmp; + int ret, tmp = 0, c = 0; if (!count) panic("feed_root: count == 0"); - tmp = stream->uio_resid; - ret = uiomove(buffer, count, stream); - if (ret) panic("feed_root: uiomove failed"); - tmp -= stream->uio_resid; + while ((stream->uio_resid > 0) && (c < count)) { + tmp = stream->uio_resid; + ret = uiomove(buffer + c, count - c, stream); + if (ret) panic("feed_root: uiomove failed"); + tmp -= stream->uio_resid; + c += tmp; + } if (!tmp) panic("feed_root: uiomove didn't"); return tmp; } @@ -232,7 +235,7 @@ feed_endian(pcm_feeder *f, u_int8_t *b, u_int32_t count, struct uio *stream) b[i + 1] = t; i += 2; } - return count; + return i; } static pcm_feeder feeder_endian = { "endian", NULL, NULL, feed_endian }; diff --git a/sys/dev/sound/pcm/feeder.c b/sys/dev/sound/pcm/feeder.c index 7c6ebebff7cf..f579b298e292 100644 --- a/sys/dev/sound/pcm/feeder.c +++ b/sys/dev/sound/pcm/feeder.c @@ -108,12 +108,15 @@ static unsigned char u8_to_ulaw[] = { static int feed_root(pcm_feeder *feeder, u_int8_t *buffer, u_int32_t count, struct uio *stream) { - int ret, tmp; + int ret, tmp = 0, c = 0; if (!count) panic("feed_root: count == 0"); - tmp = stream->uio_resid; - ret = uiomove(buffer, count, stream); - if (ret) panic("feed_root: uiomove failed"); - tmp -= stream->uio_resid; + while ((stream->uio_resid > 0) && (c < count)) { + tmp = stream->uio_resid; + ret = uiomove(buffer + c, count - c, stream); + if (ret) panic("feed_root: uiomove failed"); + tmp -= stream->uio_resid; + c += tmp; + } if (!tmp) panic("feed_root: uiomove didn't"); return tmp; } @@ -232,7 +235,7 @@ feed_endian(pcm_feeder *f, u_int8_t *b, u_int32_t count, struct uio *stream) b[i + 1] = t; i += 2; } - return count; + return i; } static pcm_feeder feeder_endian = { "endian", NULL, NULL, feed_endian }; |
