From 664c54ec31217e4939f12ee9a848ed4ac38561b6 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 11 Jan 2017 23:57:29 +0100 Subject: Fix writeall + vu-split: reuse code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/util.c | 2 +- src/vu-split.c | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/util.c b/src/util.c index 40f60e1..2a186e1 100644 --- a/src/util.c +++ b/src/util.c @@ -110,7 +110,7 @@ writeall(int fd, void *buf, size_t n) size_t ptr = 0; ssize_t r; while (ptr < n) { - r = write(STDOUT_FILENO, buffer, n); + r = write(fd, buffer, n); if (r < 0) return -1; buffer += (size_t)ptr; diff --git a/src/vu-split.c b/src/vu-split.c index e2e7968..b1ed398 100644 --- a/src/vu-split.c +++ b/src/vu-split.c @@ -15,10 +15,9 @@ int main(int argc, char *argv[]) { struct stream stream; - size_t *ends, i, parts, ptr, end, frame_size, max, ptw, n; + size_t *ends, i, parts, ptr, end, frame_size, n; FILE *fp; int fd; - ssize_t r; ENOFLAGS(argc < 2 || argc % 2); @@ -54,17 +53,12 @@ main(int argc, char *argv[]) efflush(fp, argv[i * 2]); for (end = ends[i] * frame_size; ptr < end; ptr += n) { - for (ptw = ptr; stream.ptr && ptw < end;) { - max = end - ptw; - max = max < stream.ptr ? max : stream.ptr; - r = write(fd, stream.buf, max); - if (r < 0) - eprintf("write %s:\n", argv[i * 2]); - memmove(stream.buf, stream.buf + r, stream.ptr - (size_t)r); - } - n = eread_stream(&stream, end - ptr); - if (n == 0) + if (stream.ptr == sizeof(stream.buf)) + n = stream.ptr < end - ptr ? stream.ptr : end - ptr; + else if (!(n = eread_stream(&stream, end - ptr))) eprintf("%s: file is shorter than expected\n", stream.file); + ewriteall(STDOUT_FILENO, stream.buf, n, ""); + memmove(stream.buf, stream.buf + n, stream.ptr -= n); } if (fclose(fp)) -- cgit v1.2.3-70-g09d2