diff options
| author | Mattias Andrée <maandree@kth.se> | 2017-01-11 22:36:01 +0100 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2017-01-11 22:36:01 +0100 |
| commit | 084b7e69db699a0802f1fb58fcf33adeb3a5f3d3 (patch) | |
| tree | f667a2a1dc3ce2ac30ba7c092dbf102dcba78282 /src | |
| parent | Fix vu-cut (diff) | |
| download | blind-084b7e69db699a0802f1fb58fcf33adeb3a5f3d3.tar.gz blind-084b7e69db699a0802f1fb58fcf33adeb3a5f3d3.tar.bz2 blind-084b7e69db699a0802f1fb58fcf33adeb3a5f3d3.tar.xz | |
Fix vu-repeat
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src')
| -rw-r--r-- | src/vu-repeat.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/src/vu-repeat.c b/src/vu-repeat.c index 0c0e510..367d976 100644 --- a/src/vu-repeat.c +++ b/src/vu-repeat.c @@ -14,7 +14,7 @@ int main(int argc, char *argv[]) { struct stream stream; - size_t count = 0, ptr, n; + size_t count = 0, ptr; ssize_t r; char buf[BUFSIZ]; int inf = 0; @@ -39,26 +39,21 @@ main(int argc, char *argv[]) efflush(stdout, "<stdout>"); while (inf || count--) { - posix_fadvise(stream.fd, 0, 0, POSIX_FADV_SEQUENTIAL); - if (writeall(STDOUT_FILENO, stream.buf, stream.ptr)) - goto writeerr; - for (ptr = 0;;) { + posix_fadvise(stream.fd, stream.headlen, 0, POSIX_FADV_SEQUENTIAL); + for (ptr = stream.headlen;; ptr += (size_t)r) { r = pread(stream.fd, buf, sizeof(buf), ptr); if (r < 0) eprintf("pread %s:", stream.file); - else if (r == 0) + if (r == 0) break; - ptr += n = (size_t)r; - if (writeall(STDOUT_FILENO, buf, n)) - goto writeerr; + if (writeall(STDOUT_FILENO, buf, (size_t)r)) { + if (!inf || errno != EPIPE) + eprintf("write <stdout>:"); + return 0; + } } } close(stream.fd); return 0; - -writeerr: - if (!inf || errno != EPIPE) - eprintf("write <stdout>:"); - return 0; } |
