diff options
Diffstat (limited to 'write_or_die.c')
-rw-r--r-- | write_or_die.c | 47 |
1 files changed, 15 insertions, 32 deletions
diff --git a/write_or_die.c b/write_or_die.c index b50f99a936..eab8c8d0b9 100644 --- a/write_or_die.c +++ b/write_or_die.c @@ -1,14 +1,5 @@ #include "cache.h" - -static void check_pipe(int err) -{ - if (err == EPIPE) { - signal(SIGPIPE, SIG_DFL); - raise(SIGPIPE); - /* Should never happen, but just in case... */ - exit(141); - } -} +#include "run-command.h" /* * Some cases use stdio, but want to flush after the write @@ -49,40 +40,32 @@ void maybe_flush_or_die(FILE *f, const char *desc) } } -void fsync_or_die(int fd, const char *msg) +void fprintf_or_die(FILE *f, const char *fmt, ...) { - if (fsync(fd) < 0) { - die_errno("fsync error on '%s'", msg); - } -} + va_list ap; + int ret; -void write_or_die(int fd, const void *buf, size_t count) -{ - if (write_in_full(fd, buf, count) < 0) { + va_start(ap, fmt); + ret = vfprintf(f, fmt, ap); + va_end(ap); + + if (ret < 0) { check_pipe(errno); die_errno("write error"); } } -int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg) +void fsync_or_die(int fd, const char *msg) { - if (write_in_full(fd, buf, count) < 0) { - check_pipe(errno); - fprintf(stderr, "%s: write error (%s)\n", - msg, strerror(errno)); - return 0; + if (fsync(fd) < 0) { + die_errno("fsync error on '%s'", msg); } - - return 1; } -int write_or_whine(int fd, const void *buf, size_t count, const char *msg) +void write_or_die(int fd, const void *buf, size_t count) { if (write_in_full(fd, buf, count) < 0) { - fprintf(stderr, "%s: write error (%s)\n", - msg, strerror(errno)); - return 0; + check_pipe(errno); + die_errno("write error"); } - - return 1; } |