Further compile fixes.
diff --git a/lib/zip_source_file.h b/lib/zip_source_file.h
index 31edd4a..43a4645 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 *(*string_duplicate)(const char *);
+ char *(*string_duplicate)(zip_source_file_context_t *ctx, 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_stdio_write.c b/lib/zip_source_file_stdio_write.c
index 704dcb2..30054c4 100644
--- a/lib/zip_source_file_stdio_write.c
+++ b/lib/zip_source_file_stdio_write.c
@@ -58,6 +58,7 @@
static bool _zip_stdio_op_open(zip_source_file_context_t *ctx);
static zip_int64_t _zip_stdio_op_remove(zip_source_file_context_t *ctx);
static void _zip_stdio_op_rollback_write(zip_source_file_context_t *ctx);
+static char *_zip_stdio_op_strdup(zip_source_file_context_t *ctx, const char *string);
static zip_int64_t _zip_stdio_op_write(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len);
/* clang-format off */
@@ -76,7 +77,7 @@
_zip_stdio_op_rollback_write,
_zip_stdio_op_seek,
_zip_stdio_op_stat,
- strdup,
+ _zip_stdio_op_strdup,
_zip_stdio_op_tell,
_zip_stdio_op_write
};
@@ -287,6 +288,12 @@
(void)remove(ctx->tmpname);
}
+static char *
+_zip_stdio_op_strdup(zip_source_file_context_t *ctx, const char *string) {
+ return strdup(string);
+}
+
+
static zip_int64_t
_zip_stdio_op_write(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len) {
size_t ret;
diff --git a/lib/zip_source_file_win32.h b/lib/zip_source_file_win32.h
index da0ccd7..c844bf3 100644
--- a/lib/zip_source_file_win32.h
+++ b/lib/zip_source_file_win32.h
@@ -48,12 +48,12 @@
#include "zip_source_file.h"
struct zip_source_file_win32_write_operations {
- char *(*allocate_tempname)(const char *name, size_t extra_chars);
+ char *(*allocate_tempname)(const char *name, size_t extra_chars, size_t *lengthp);
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);
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, DWORD flags);
+ bool (*move_file)(const char *from, const char *to);
bool (*set_file_attributes)(const char *name, DWORD attributes);
char *(*string_duplicate)(const char *string);
};
diff --git a/lib/zip_source_file_win32_ansi.c b/lib/zip_source_file_win32_ansi.c
index 55b3f93..74cb594 100644
--- a/lib/zip_source_file_win32_ansi.c
+++ b/lib/zip_source_file_win32_ansi.c
@@ -33,7 +33,7 @@
#include "zip_source_file_win32.h"
-static char *ansi_allocate_tempname(const char *name, size_t extra_chars);
+static char *ansi_allocate_tempname(const char *name, size_t extra_chars, size_t *lengthp);
static void ansi_make_tempname(char *buf, size_t len, const char *name, int i);
zip_source_file_win32_write_operations_t ops_ansi = {
@@ -42,7 +42,7 @@
DeleteFileA,
GetFileAttributesA,
ansi_make_tempname,
- MoveFileA,
+ MoveFileExA,
SetFileAttributesA,
strdup
};
@@ -68,8 +68,9 @@
static char *
-ansi_allocate_tempname(const char *name, size_t extra_chars) {
- return (char *)malloc(strlen(name) + extra_chars);
+ansi_allocate_tempname(const char *name, size_t extra_chars, size_t *lengthp) {
+ *lengthp = strlen(name) + extra_chars;
+ return (char *)malloc(*lengthp);
}
diff --git a/lib/zip_source_file_win32_utf16.c b/lib/zip_source_file_win32_utf16.c
index 7327f9f..7b57970 100644
--- a/lib/zip_source_file_win32_utf16.c
+++ b/lib/zip_source_file_win32_utf16.c
@@ -33,7 +33,7 @@
#include "zip_source_file_win32.h"
-static char *utf16_allocate_tempname(const char *name, size_t extra_chars);
+static char *utf16_allocate_tempname(const char *name, size_t extra_chars, size_t *lengthp);
static HANDLE utf16_create_file(const char *name, DWORD access, DWORD share_mode, PSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD file_attributes, HANDLE template_file);
static bool utf16_delete_file(const char *name);
static DWORD utf16_get_file_attributes(const char *name);
@@ -74,8 +74,9 @@
static char *
-utf16_allocate_tempname(const char *name, size_t extra_chars) {
- return (char *)malloc((wcslen((const wchar_t *)name) + extra_chars) * sizeof(wchar_t));
+utf16_allocate_tempname(const char *name, size_t extra_chars, size_t *lengthp) {
+ *lengthp = wcslen((const wchar_t *)name) + extra_chars;
+ return (char *)malloc(*lengthp * sizeof(wchar_t));
}
@@ -116,7 +117,7 @@
static
bool utf16_move_file(const char *from, const char *to, DWORD flags) {
- return MoveFileW((const wchar_t *)from, (const wchar_t *)to, flags);
+ return MoveFileExW((const wchar_t *)from, (const wchar_t *)to, flags);
}
diff --git a/lib/zip_source_file_win32_write.c b/lib/zip_source_file_win32_write.c
index 1d37239..5de6ed4 100644
--- a/lib/zip_source_file_win32_write.c
+++ b/lib/zip_source_file_win32_write.c
@@ -43,7 +43,7 @@
static char *_zip_win32_write_strdup(const char *string);
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,
@@ -204,7 +204,7 @@
static char *
-_zip_win32_write_strdup(const char *string) {
+_zip_win32_write_strdup(zip_source_file_context_t *ctx, 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);