short i/o: clean up the naming for the write_{in,or}_xxx family
[git/mingw/j6t.git] / write_or_die.c
blob613c0c3f6e90cc6a1b7ae9c0ade4e5c10dc25029
1 #include "cache.h"
3 void read_or_die(int fd, void *buf, size_t count)
5 char *p = buf;
6 ssize_t loaded;
8 while (count > 0) {
9 loaded = xread(fd, p, count);
10 if (loaded == 0)
11 die("unexpected end of file");
12 else if (loaded < 0)
13 die("read error (%s)", strerror(errno));
14 count -= loaded;
15 p += loaded;
19 void write_or_die(int fd, const void *buf, size_t count)
21 const char *p = buf;
22 ssize_t written;
24 while (count > 0) {
25 written = xwrite(fd, p, count);
26 if (written == 0)
27 die("disk full?");
28 else if (written < 0) {
29 if (errno == EPIPE)
30 exit(0);
31 die("write error (%s)", strerror(errno));
33 count -= written;
34 p += written;
38 int write_in_full(int fd, const void *buf, size_t count)
40 const char *p = buf;
41 ssize_t total = 0;
42 ssize_t wcount = 0;
44 while (count > 0) {
45 wcount = xwrite(fd, p, count);
46 if (wcount <= 0) {
47 if (total)
48 return total;
49 else
50 return wcount;
52 count -= wcount;
53 p += wcount;
54 total += wcount;
57 return wcount;
60 int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg)
62 ssize_t written;
64 written = write_in_full(fd, buf, count);
65 if (written == 0) {
66 fprintf(stderr, "%s: disk full?\n", msg);
67 return 0;
69 else if (written < 0) {
70 if (errno == EPIPE)
71 exit(0);
72 fprintf(stderr, "%s: write error (%s)\n",
73 msg, strerror(errno));
74 return 0;
77 return 1;
80 int write_or_whine(int fd, const void *buf, size_t count, const char *msg)
82 ssize_t written;
84 written = write_in_full(fd, buf, count);
85 if (written == 0) {
86 fprintf(stderr, "%s: disk full?\n", msg);
87 return 0;
89 else if (written < 0) {
90 fprintf(stderr, "%s: write error (%s)\n",
91 msg, strerror(errno));
92 return 0;
95 return 1;