From: Martin Matuska Date: Mon, 2 Mar 2020 01:45:50 +0000 (+0100) Subject: Store errno when unlinking after rename on safe write failed X-Git-Tag: v3.4.3~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d84ec3fbc21ff943b4c742ec141de30efc8bd769;p=thirdparty%2Flibarchive.git Store errno when unlinking after rename on safe write failed --- diff --git a/libarchive/archive_write_disk_posix.c b/libarchive/archive_write_disk_posix.c index 173ea808f..35b5aedf7 100644 --- a/libarchive/archive_write_disk_posix.c +++ b/libarchive/archive_write_disk_posix.c @@ -1654,6 +1654,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, @@ -1855,7 +1856,9 @@ finish_metadata: a->fd = -1; if (a->tmpname) { if (rename(a->tmpname, a->name) == -1) { + oerrno = errno; unlink(a->tmpname); + errno = oerrno; archive_set_error(&a->archive, errno, "Failed to safe write"); ret = ARCHIVE_FATAL;