diff options
author | Junio C Hamano <junkio@cox.net> | 2005-12-19 16:18:28 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-12-19 18:28:16 -0800 |
commit | 1c15afb9343bca82e687d008ec983a9110ac9c40 (patch) | |
tree | ed760b10c0c124e7ec3c1934e4bb1291a8faf0a0 /apply.c | |
parent | 1fdfd05db2f6e6bacd8c8255992fa4a7f1756176 (diff) | |
download | git-1c15afb9343bca82e687d008ec983a9110ac9c40.tar.gz |
xread/xwrite: do not worry about EINTR at calling sites.
We had errno==EINTR check after read(2)/write(2) sprinkled all
over the places, always doing continue. Consolidate them into
xread()/xwrite() wrapper routines.
Credits for suggestion goes to HPA -- bugs are mine.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'apply.c')
-rw-r--r-- | apply.c | 23 |
1 files changed, 6 insertions, 17 deletions
@@ -84,14 +84,11 @@ static void *read_patch_file(int fd, unsigned long *sizep) buffer = xrealloc(buffer, alloc); nr = alloc - size; } - nr = read(fd, buffer + size, nr); + nr = xread(fd, buffer + size, nr); if (!nr) break; - if (nr < 0) { - if (errno == EAGAIN) - continue; + if (nr < 0) die("git-apply: read returned %s", strerror(errno)); - } size += nr; } *sizep = size; @@ -1006,13 +1003,8 @@ static int read_old_data(struct stat *st, const char *path, void *buf, unsigned return error("unable to open %s", path); got = 0; for (;;) { - int ret = read(fd, buf + got, size - got); - if (ret < 0) { - if (errno == EAGAIN) - continue; - break; - } - if (!ret) + int ret = xread(fd, buf + got, size - got); + if (ret <= 0) break; got += ret; } @@ -1600,12 +1592,9 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf, if (fd < 0) return -1; while (size) { - int written = write(fd, buf, size); - if (written < 0) { - if (errno == EINTR || errno == EAGAIN) - continue; + int written = xwrite(fd, buf, size); + if (written < 0) die("writing file %s: %s", path, strerror(errno)); - } if (!written) die("out of space writing file %s", path); buf += written; |