From b6babc688d3d49ca32c3dbadfb2a4e32e9a43cdd Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Fri, 4 Oct 2019 21:13:31 +0200 Subject: Windows: Update libzip to version 1.5.2 --- src/Common/libzip/zip_source_filep.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/Common/libzip/zip_source_filep.c') diff --git a/src/Common/libzip/zip_source_filep.c b/src/Common/libzip/zip_source_filep.c index 9fc9a01c..cb3d1511 100644 --- a/src/Common/libzip/zip_source_filep.c +++ b/src/Common/libzip/zip_source_filep.c @@ -1,6 +1,6 @@ /* zip_source_filep.c -- create data source from FILE * - Copyright (C) 1999-2017 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2019 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -34,6 +34,7 @@ #include #include #include +#include #include #include "zipint.h" @@ -412,21 +413,27 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) { #endif case ZIP_SOURCE_COMMIT_WRITE: { - mode_t mask; + mode_t mode; + struct stat st; if (fclose(ctx->fout) < 0) { ctx->fout = NULL; zip_error_set(&ctx->error, ZIP_ER_WRITE, errno); } ctx->fout = NULL; + if (stat(ctx->fname, &st) == 0) { + mode = st.st_mode; + } else { + mode_t mask = umask(022); + umask(mask); + mode = 0666 & ~mask; + } if (rename(ctx->tmpname, ctx->fname) < 0) { zip_error_set(&ctx->error, ZIP_ER_RENAME, errno); return -1; } - mask = umask(022); - umask(mask); /* not much we can do if chmod fails except make the whole commit fail */ - (void)chmod(ctx->fname, 0666 & ~mask); + (void)chmod(ctx->fname, mode); free(ctx->tmpname); ctx->tmpname = NULL; return 0; -- cgit v1.2.3