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()));