]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Store errno when unlinking after rename on safe write failed
authorMartin Matuska <martin@matuska.org>
Mon, 2 Mar 2020 01:45:50 +0000 (02:45 +0100)
committerMartin Matuska <martin@matuska.org>
Mon, 2 Mar 2020 01:46:19 +0000 (02:46 +0100)
libarchive/archive_write_disk_posix.c

index 173ea808fb8679ce76e19123108402fed4455918..35b5aedf7f03040224dfba415c00eff7de2fd605 100644 (file)
@@ -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;