diff options
| author | Martin Matuska <mm@FreeBSD.org> | 2020-03-02 02:12:53 +0000 |
|---|---|---|
| committer | Martin Matuska <mm@FreeBSD.org> | 2020-03-02 02:12:53 +0000 |
| commit | 65da968c5ce7595908a244f509658357bf4bc49d (patch) | |
| tree | c979bd80e10d9a6fc4ca0ce88f137ee6370d6a76 /libarchive/archive_write_disk_windows.c | |
| parent | 8185c4ae244f9a52ad987b36e7d6300500054d00 (diff) | |
Notes
Diffstat (limited to 'libarchive/archive_write_disk_windows.c')
| -rw-r--r-- | libarchive/archive_write_disk_windows.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libarchive/archive_write_disk_windows.c b/libarchive/archive_write_disk_windows.c index 77e36c4a621d..4b703492b147 100644 --- a/libarchive/archive_write_disk_windows.c +++ b/libarchive/archive_write_disk_windows.c @@ -1174,6 +1174,7 @@ _archive_write_disk_finish_entry(struct archive *_a) { struct archive_write_disk *a = (struct archive_write_disk *)_a; int ret = ARCHIVE_OK; + int oerrno; archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC, ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA, @@ -1281,8 +1282,11 @@ _archive_write_disk_finish_entry(struct archive *_a) /* Windows does not support atomic rename */ disk_unlink(a->name); if (_wrename(a->tmpname, a->name) != 0) { + oerrno = errno; + disk_unlink(a->tmpname); + errno = oerrno; archive_set_error(&a->archive, errno, - "rename failed"); + "Failed to safe write"); ret = ARCHIVE_FATAL; } a->tmpname = NULL; |
