Further compile fixes.

Avoid strdup as member name, sine it’s a define on some Linux variants.
diff --git a/lib/zip_source_file.h b/lib/zip_source_file.h
index 6cf29c0..31edd4a 100644
--- a/lib/zip_source_file.h
+++ b/lib/zip_source_file.h
@@ -82,7 +82,7 @@
     void (*rollback_write)(zip_source_file_context_t *ctx);
     bool (*seek)(zip_source_file_context_t *ctx, void *f, zip_int64_t offset, int whence);
     bool (*stat)(zip_source_file_context_t *ctx, zip_source_file_stat_t *st);
-    char *(*strdup)(const char *);
+    char *(*string_duplicate)(const char *);
     zip_int64_t (*tell)(zip_source_file_context_t *ctx, void *f);
     zip_int64_t (*write)(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len);
 };
diff --git a/lib/zip_source_file_common.c b/lib/zip_source_file_common.c
index 0c7fe5f..90f9b5a 100644
--- a/lib/zip_source_file_common.c
+++ b/lib/zip_source_file_common.c
@@ -72,7 +72,7 @@
     }
 
     if (fname != NULL) {
-	if (ops->close == NULL || ops->open == NULL || ops->strdup == NULL) {
+	if (ops->close == NULL || ops->open == NULL || ops->string_duplicate == NULL) {
 	    zip_error_set(error, ZIP_ER_INTERNAL, 0);
 	    return NULL;
 	}
@@ -100,7 +100,7 @@
     ctx->ops_userdata = ops_userdata;
     ctx->fname = NULL;
     if (fname) {
-	if ((ctx->fname = ops->strdup(fname)) == NULL) {
+	if ((ctx->fname = ops->string_duplicate(fname)) == NULL) {
 	    zip_error_set(error, ZIP_ER_MEMORY, 0);
 	    free(ctx);
 	    return NULL;
diff --git a/lib/zip_source_file_win32.c b/lib/zip_source_file_win32.c
index 03a3288..6bb9b68 100644
--- a/lib/zip_source_file_win32.c
+++ b/lib/zip_source_file_win32.c
@@ -147,6 +147,7 @@
     LARGE_INTEGER zero;
     LARGE_INTEGER new_offset;
     
+    zero.QuadPart = 0;
     if (!SetFilePointerEx((HANDLE)ctx->f, zero, &new_offset, FILE_CURRENT)) {
         zip_error_set(&ctx->error, ZIP_ER_SEEK, _zip_win32_error_to_errno(GetLastError()));
         return -1;
@@ -185,7 +186,6 @@
     FILETIME mtimeft;
     time_t mtime;
     LARGE_INTEGER size;
-    int regularp;
 
     if (!GetFileTime(h, NULL, NULL, &mtimeft)) {
         zip_error_set(&ctx->error, ZIP_ER_READ, _zip_win32_error_to_errno(GetLastError()));
diff --git a/lib/zip_source_file_win32.h b/lib/zip_source_file_win32.h
index 4ee8ab0..da0ccd7 100644
--- a/lib/zip_source_file_win32.h
+++ b/lib/zip_source_file_win32.h
@@ -48,14 +48,14 @@
 #include "zip_source_file.h"
 
 struct zip_source_file_win32_write_operations {
-    char *(*allocate_tempname)(const char *name, int extra_chars);
+    char *(*allocate_tempname)(const char *name, size_t extra_chars);
     HANDLE (*create_file)(const char *name, DWORD access, DWORD share_mode, PSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD file_attributes, HANDLE template_file);
     bool (*delete_file)(const char *name);
-    int (*get_file_attributes)(const char *name);
+    DWORD (*get_file_attributes)(const char *name);
     void (*make_tempname)(char *buf, size_t len, const char *name, int i);
-    bool (*move_file)(const char *from, const char *to);
-    bool (*set_file_attributes)(const char *name, int attributes);
-    char *(*strdup)(const char *string);
+    bool (*move_file)(const char *from, const char *to, DWORD flags);
+    bool (*set_file_attributes)(const char *name, DWORD attributes);
+    char *(*string_duplicate)(const char *string);
 };
 
 typedef struct zip_source_file_win32_write_operations zip_source_file_win32_write_operations_t;
diff --git a/lib/zip_source_file_win32_utf16.c b/lib/zip_source_file_win32_utf16.c
index 92545cc..7327f9f 100644
--- a/lib/zip_source_file_win32_utf16.c
+++ b/lib/zip_source_file_win32_utf16.c
@@ -38,7 +38,7 @@
 static bool utf16_delete_file(const char *name);
 static DWORD utf16_get_file_attributes(const char *name);
 static void utf16_make_tempname(char *buf, size_t len, const char *name, int i);
-static bool utf16_move_file(const char *from, const char *to);
+static bool utf16_move_file(const char *from, const char *to, DWORD flags);
 static bool utf16_set_file_attributes(const char *name, DWORD attributes);
 static char *utf16_strdup(const char *string);
 
@@ -114,6 +114,12 @@
     _snwprintf((wchar_t *)buf, len, L"%s.%08x", (const wchar_t *)name, i);
 }
 
+static
+bool utf16_move_file(const char *from, const char *to, DWORD flags) {
+    return MoveFileW((const wchar_t *)from, (const wchar_t *)to, flags);
+}
+
+
 static bool
 utf16_set_file_attributes(const char *name, DWORD attributes) {
     return SetFileAttributesW((const wchar_t *)name, attributes);
diff --git a/lib/zip_source_file_win32_write.c b/lib/zip_source_file_win32_write.c
index 7f2e8a7..1d37239 100644
--- a/lib/zip_source_file_win32_write.c
+++ b/lib/zip_source_file_win32_write.c
@@ -40,9 +40,10 @@
 static zip_int64_t _zip_win32_write_op_remove(zip_source_file_context_t *ctx);
 static void _zip_win32_write_op_rollback_write(zip_source_file_context_t *ctx);
 static bool _zip_win32_write_op_stat(zip_source_file_context_t *ctx, zip_source_file_stat_t *st);
+static char *_zip_win32_write_strdup(const char *string);
 
-static HANDLE win32_write_open(zip_source_file_context_t *ctx);
-
+static HANDLE win32_write_open(zip_source_file_context_t *ctx, const char *name, bool temporary, PSECURITY_ATTRIBUTES security_attributes);

 /* clang-format off */
 zip_source_file_operations_t zip_source_file_win32_write_operations = {
     _zip_win32_op_close,
@@ -55,7 +56,7 @@
     _zip_win32_write_op_rollback_write,
     _zip_win32_op_seek,
     _zip_win32_write_op_stat,
-    strdup,
+    _zip_win32_write_strdup,
     _zip_win32_op_tell,
     _zip_win32_op_write
 };
@@ -202,6 +203,15 @@
 }
 
 
+static char *
+_zip_win32_write_strdup(const char *string) {
+    zip_source_file_win32_write_operations_t *write_ops = (zip_source_file_win32_write_operations_t *)ctx->ops_userdata;
+
+    return write_ops->string_duplicate(string);
+}
+
+
+
 static HANDLE
 win32_write_open(zip_source_file_context_t *ctx, const char *name, bool temporary, PSECURITY_ATTRIBUTES security_attributes) {
     zip_source_file_win32_write_operations_t *write_ops = (zip_source_file_win32_write_operations_t *)ctx->ops_userdata;
@@ -218,7 +228,7 @@
         file_attributes |= FILE_ATTRIBUTE_TEMPORARY;
     }
 
-    HANDLE h = write_ops->create_file(name, access, share_mode, security_attributes, creation_disposition, file_attributes);
+    HANDLE h = write_ops->create_file(name, access, share_mode, security_attributes, creation_disposition, file_attributes, NULL);
     
     if (h == INVALID_HANDLE_VALUE) {
         zip_error_set(&ctx->error, ZIP_ER_OPEN, _zip_win32_error_to_errno(GetLastError()));