com php-src: fix occasional fail in zip_close when target arc exists: ext/zip/lib/zip_source_filep.c
| From: | Anatol Belski | Date: | Wed, 19 Aug 2015 13:23:21 +0000 |
| Subject: | com php-src: fix occasional fail in zip_close when target arc exists: ext/zip/lib/zip_source_filep.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-88684@lists.php.net to get a copy of this message | ||
Commit: ed78d59a1dc9d84cf6ce77fbad94ab7e2f860cb5
Author: Anatol Belski <ab@php.net> Wed, 19 Aug 2015 15:19:44 +0200
Parents: c97427ea8e7a0ca232d81ec74aac39c5ed07037d
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=ed78d59a1dc9d84cf6ce77fbad94ab7e2f860cb5
Log:
fix occasional fail in zip_close when target arc exists
Changed paths:
M ext/zip/lib/zip_source_filep.c
Diff:
diff --git a/ext/zip/lib/zip_source_filep.c b/ext/zip/lib/zip_source_filep.c
index e541305..f99da22 100644
--- a/ext/zip/lib/zip_source_filep.c
+++ b/ext/zip/lib/zip_source_filep.c
@@ -43,6 +43,7 @@
#ifdef _WIN32
/* WIN32 needs <fcntl.h> for _O_BINARY */
#include <fcntl.h>
+#include <windows.h>
#endif
/* Windows sys/types.h does not provide these */
@@ -248,10 +249,17 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd)
zip_error_set(&ctx->error, ZIP_ER_WRITE, errno);
}
ctx->fout = NULL;
+#ifdef _WIN32
+ if (!MoveFileEx(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) {
+ zip_error_set(&ctx->error, ZIP_ER_RENAME, GetLastError());
+ return -1;
+ }
+#else
if (rename(ctx->tmpname, ctx->fname) < 0) {
zip_error_set(&ctx->error, ZIP_ER_RENAME, errno);
return -1;
}
+#endif
mask = umask(022);
umask(mask);
/* not much we can do if chmod fails except make the whole commit fail */