Moved _zip_set_win32_error() - now a static function in zip_source_win32file.c
diff --git a/lib/zip_source_win32a.c b/lib/zip_source_win32a.c
index 25e11ac..95699e9 100644
--- a/lib/zip_source_win32a.c
+++ b/lib/zip_source_win32a.c
@@ -111,10 +111,8 @@
 int
 _win32_rename_temp_a(_zip_source_win32_read_file_t *ctx)
 {
-    if (!MoveFileExA(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) {
-	zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_set_win32_error(GetLastError(), &ctx->win32err));
+    if (!MoveFileExA(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING))
 	return -1;
-    }
     return 0;
 }
 
diff --git a/lib/zip_source_win32file.c b/lib/zip_source_win32file.c
index 9d1992d..e9cff27 100644
--- a/lib/zip_source_win32file.c
+++ b/lib/zip_source_win32file.c
@@ -45,6 +45,7 @@
 static int _zip_filetime_to_time_t(FILETIME ft, time_t *t);
 static int _zip_seek_win32_u(void *h, zip_uint64_t offset, int whence, zip_error_t *error, unsigned long *win32errptr);
 static int _zip_seek_win32(void *h, zip_int64_t offset, int whence, zip_error_t *error, unsigned long *win32errptr);
+static int _zip_set_win32_error(unsigned long win32err, unsigned long *win32errptr);
 static int _zip_stat_win32(void *h, zip_stat_t *st, _zip_source_win32_read_file_t *ctx);
 
 ZIP_EXTERN zip_source_t *
@@ -68,6 +69,7 @@
     return _zip_source_win32_handle_or_name(NULL, h, start, length, 1, NULL, NULL, error);
 }
 
+
 zip_source_t *
 _zip_source_win32_handle_or_name(const void *fname, HANDLE h, zip_uint64_t start, zip_int64_t len, int closep, const zip_stat_t *st, _zip_source_win32_file_ops_t *ops, zip_error_t *error)
 {
@@ -136,6 +138,7 @@
     return zs;
 }
 
+
 zip_int64_t
 _win32_read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd)
 {
@@ -161,7 +164,11 @@
 	    zip_error_set(&ctx->error, ZIP_ER_WRITE, _zip_set_win32_error(GetLastError(), &ctx->win32err));
 	}
 	ctx->hout = INVALID_HANDLE_VALUE;
-	return ctx->ops->op_rename_temp(ctx);
+	if (ctx->ops->op_rename_temp(ctx) < 0) {
+	    zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_set_win32_error(GetLastError(), &ctx->win32err));
+	    return -1;
+	}
+	return 0;
     }
 
     case ZIP_SOURCE_CLOSE:
@@ -391,6 +398,7 @@
     }
 }
 
+
 int
 _win32_create_temp_file(_zip_source_win32_read_file_t *ctx)
 {
@@ -422,6 +430,7 @@
     return 0;
 }
 
+
 int
 _zip_seek_win32_u(HANDLE h, zip_uint64_t offset, int whence, zip_error_t *error, DWORD *win32errptr)
 {
@@ -465,6 +474,36 @@
 
 
 int
+_zip_set_win32_error(DWORD win32err, DWORD *win32errptr)
+{
+    /*
+    Note: This list isn't exhaustive, but should cover common cases.
+    */
+    if (win32errptr != NULL) {
+	*win32errptr = win32err;
+    }
+    switch (win32err) {
+    case ERROR_INVALID_PARAMETER:
+	return EINVAL;
+    case ERROR_FILE_NOT_FOUND:
+	return ENOENT;
+    case ERROR_INVALID_HANDLE:
+	return EBADF;
+    case ERROR_ACCESS_DENIED:
+	return EACCES;
+    case ERROR_FILE_EXISTS:
+	return EEXIST;
+    case ERROR_TOO_MANY_OPEN_FILES:
+	return EMFILE;
+    case ERROR_DISK_FULL:
+	return ENOSPC;
+    default:
+	return 0;
+    }
+}
+
+
+int
 _zip_stat_win32(HANDLE h, zip_stat_t *st, _zip_source_win32_read_file_t *ctx)
 {
     FILETIME mtimeft;
@@ -502,35 +541,6 @@
 
 
 int
-_zip_set_win32_error(DWORD win32err, DWORD *win32errptr)
-{
-    /*
-    Note: This list isn't exhaustive, but should cover common cases.
-    */
-    if (win32errptr != NULL) {
-	*win32errptr = win32err;
-    }
-    switch (win32err) {
-    case ERROR_INVALID_PARAMETER:
-	return EINVAL;
-    case ERROR_FILE_NOT_FOUND:
-	return ENOENT;
-    case ERROR_INVALID_HANDLE:
-	return EBADF;
-    case ERROR_ACCESS_DENIED:
-	return EACCES;
-    case ERROR_FILE_EXISTS:
-	return EEXIST;
-    case ERROR_TOO_MANY_OPEN_FILES:
-	return EMFILE;
-    case ERROR_DISK_FULL:
-	return ENOSPC;
-    default:
-	return 0;
-    }
-}
-
-int
 _zip_filetime_to_time_t(FILETIME ft, time_t *t)
 {
     /*
diff --git a/lib/zip_source_win32w.c b/lib/zip_source_win32w.c
index aeb6542..e5e8ceb 100644
--- a/lib/zip_source_win32w.c
+++ b/lib/zip_source_win32w.c
@@ -111,10 +111,8 @@
 int
 _win32_rename_temp_w(_zip_source_win32_read_file_t *ctx)
 {
-    if (!MoveFileExW(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) {
-	zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_set_win32_error(GetLastError(), &ctx->win32err));
+    if (!MoveFileExW(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING))
 	return -1;
-    }
     return 0;
 }
 
diff --git a/lib/zipint.h b/lib/zipint.h
index 0570d16..589a1ef 100644
--- a/lib/zipint.h
+++ b/lib/zipint.h
@@ -608,7 +608,6 @@
 int _zip_write(zip_t *za, const void *data, zip_uint64_t length);
 
 #ifdef _WIN32
-int _zip_set_win32_error(unsigned long win32err, unsigned long *win32errptr);
 zip_source_t *_zip_source_win32_handle_or_name(const void *fname, void *h, zip_uint64_t start, zip_int64_t len, int closep, const zip_stat_t *st, _zip_source_win32_file_ops_t *ops, zip_error_t *error);
 #endif