diff options
Diffstat (limited to 'libarchive/archive_write_open_file.c')
-rw-r--r-- | libarchive/archive_write_open_file.c | 14 |
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 |