summaryrefslogtreecommitdiff
path: root/write_or_die.c
diff options
context:
space:
mode:
Diffstat (limited to 'write_or_die.c')
-rw-r--r--write_or_die.c47
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;
}