summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorCameron Grant <cg@FreeBSD.org>1999-09-04 17:08:30 +0000
committerCameron Grant <cg@FreeBSD.org>1999-09-04 17:08:30 +0000
commitc5ad1e3a03342624c781b3d9d9fff13d1c317d48 (patch)
tree5bf2d449c2bedc49bb5ab64f3b3b775df5d5ac84 /sys
parent4a8480837ac824df3ece52a94c0e0e0ac96fbe21 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/pcm/feeder.c15
-rw-r--r--sys/dev/sound/pcm/feeder.c15
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 };