summaryrefslogtreecommitdiff
path: root/libarchive/archive_write_open_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'libarchive/archive_write_open_file.c')
-rw-r--r--libarchive/archive_write_open_file.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libarchive/archive_write_open_file.c b/libarchive/archive_write_open_file.c
index 5c0c737f..f6b14123 100644
--- a/libarchive/archive_write_open_file.c
+++ b/libarchive/archive_write_open_file.c
@@ -86,12 +86,16 @@ file_write(struct archive *a, void *client_data, const void *buff, size_t length
size_t bytesWritten;
mine = client_data;
- bytesWritten = fwrite(buff, 1, length, mine->f);
- if (bytesWritten < length) {
- archive_set_error(a, errno, "Write error");
- return (-1);
+ for (;;) {
+ bytesWritten = fwrite(buff, 1, length, mine->f);
+ if (bytesWritten <= 0) {
+ if (errno == EINTR)
+ continue;
+ archive_set_error(a, errno, "Write error");
+ return (-1);
+ }
+ return (bytesWritten);
}
- return (bytesWritten);
}
static int