aboutsummaryrefslogtreecommitdiff
path: root/libarchive/archive_write_disk_windows.c
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2020-03-02 02:12:53 +0000
committerMartin Matuska <mm@FreeBSD.org>2020-03-02 02:12:53 +0000
commit65da968c5ce7595908a244f509658357bf4bc49d (patch)
treec979bd80e10d9a6fc4ca0ce88f137ee6370d6a76 /libarchive/archive_write_disk_windows.c
parent8185c4ae244f9a52ad987b36e7d6300500054d00 (diff)
Notes
Diffstat (limited to 'libarchive/archive_write_disk_windows.c')
-rw-r--r--libarchive/archive_write_disk_windows.c6
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;