diff --git a/developer-xcode/libzip.xcodeproj/project.pbxproj b/developer-xcode/libzip.xcodeproj/project.pbxproj
index 02f145f..7049698 100644
--- a/developer-xcode/libzip.xcodeproj/project.pbxproj
+++ b/developer-xcode/libzip.xcodeproj/project.pbxproj
@@ -182,7 +182,7 @@
 		4B82CED519915F360097BC18 /* zip_file_set_mtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B82CED319915F360097BC18 /* zip_file_set_mtime.c */; };
 		4B908F532385BE6D00886355 /* zip_libzip_version.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B908F502385BE6C00886355 /* zip_libzip_version.c */; };
 		4B908F552385BE6D00886355 /* zip_source_accept_empty.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B908F522385BE6D00886355 /* zip_source_accept_empty.c */; };
-		4B93995A24631B3E00AEBDA4 /* zip_source_file_stdio_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B93995524631B3D00AEBDA4 /* zip_source_file_stdio_write.c */; };
+		4B93995A24631B3E00AEBDA4 /* zip_source_file_stdio_named.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B93995524631B3D00AEBDA4 /* zip_source_file_stdio_named.c */; };
 		4B93995B24631B3E00AEBDA4 /* zip_source_file_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B93995624631B3E00AEBDA4 /* zip_source_file_common.c */; };
 		4B93995C24631B3E00AEBDA4 /* zip_source_file_stdio.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B93995724631B3E00AEBDA4 /* zip_source_file_stdio.c */; };
 		4B93995D24631B3E00AEBDA4 /* zip_source_file_stdio.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B93995824631B3E00AEBDA4 /* zip_source_file_stdio.h */; };
@@ -627,7 +627,7 @@
 		4B82CED319915F360097BC18 /* zip_file_set_mtime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_mtime.c; sourceTree = "<group>"; };
 		4B908F502385BE6C00886355 /* zip_libzip_version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_libzip_version.c; sourceTree = "<group>"; };
 		4B908F522385BE6D00886355 /* zip_source_accept_empty.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_accept_empty.c; sourceTree = "<group>"; };
-		4B93995524631B3D00AEBDA4 /* zip_source_file_stdio_write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_stdio_write.c; sourceTree = "<group>"; };
+		4B93995524631B3D00AEBDA4 /* zip_source_file_stdio_named.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_stdio_named.c; sourceTree = "<group>"; };
 		4B93995624631B3E00AEBDA4 /* zip_source_file_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_common.c; sourceTree = "<group>"; };
 		4B93995724631B3E00AEBDA4 /* zip_source_file_stdio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_stdio.c; sourceTree = "<group>"; };
 		4B93995824631B3E00AEBDA4 /* zip_source_file_stdio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_source_file_stdio.h; sourceTree = "<group>"; };
@@ -637,7 +637,7 @@
 		4B93996124641D5700AEBDA4 /* zip_source_file_win32_ansi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_ansi.c; sourceTree = "<group>"; };
 		4B93996224643F5700AEBDA4 /* zip_source_file_win32_utf8.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_utf8.c; sourceTree = "<group>"; };
 		4B9399632464401300AEBDA4 /* zip_source_file_win32_utf16.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_utf16.c; sourceTree = "<group>"; };
-		4B93996424644E7E00AEBDA4 /* zip_source_file_win32_write.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_write.c; sourceTree = "<group>"; };
+		4B93996424644E7E00AEBDA4 /* zip_source_file_win32_named.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_named.c; sourceTree = "<group>"; };
 		4B939965246553FD00AEBDA4 /* appveyor.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = appveyor.yml; sourceTree = "<group>"; };
 		4B97204D188EBE85002FAFAD /* zip_file_get_external_attributes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_get_external_attributes.c; sourceTree = "<group>"; };
 		4B97204E188EBE85002FAFAD /* zip_file_set_external_attributes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_external_attributes.c; sourceTree = "<group>"; };
@@ -1496,12 +1496,12 @@
 				4BDC722A15B1B25E00236D3C /* zip_source_crc.c */,
 				4BDC722C15B1B25E00236D3C /* zip_source_error.c */,
 				4B93995624631B3E00AEBDA4 /* zip_source_file_common.c */,
-				4B93995524631B3D00AEBDA4 /* zip_source_file_stdio_write.c */,
+				4B93995524631B3D00AEBDA4 /* zip_source_file_stdio_named.c */,
 				4B93995724631B3E00AEBDA4 /* zip_source_file_stdio.c */,
 				4B93995824631B3E00AEBDA4 /* zip_source_file_stdio.h */,
 				4B93996024640B1700AEBDA4 /* zip_source_file_win32.c */,
 				4B93996124641D5700AEBDA4 /* zip_source_file_win32_ansi.c */,
-				4B93996424644E7E00AEBDA4 /* zip_source_file_win32_write.c */,
+				4B93996424644E7E00AEBDA4 /* zip_source_file_win32_named.c */,
 				4B9399632464401300AEBDA4 /* zip_source_file_win32_utf16.c */,
 				4B93996224643F5700AEBDA4 /* zip_source_file_win32_utf8.c */,
 				4B93995F24640B1700AEBDA4 /* zip_source_file_win32.h */,
@@ -1920,7 +1920,7 @@
 				4BD7087A1EB1CF73003F351F /* zip_progress.c in Sources */,
 				4B01D6AC15B2F46B002D5007 /* zip_dirent.c in Sources */,
 				4B00CA24242F59D700E0B71C /* zip_source_pkware_decode.c in Sources */,
-				4B93995A24631B3E00AEBDA4 /* zip_source_file_stdio_write.c in Sources */,
+				4B93995A24631B3E00AEBDA4 /* zip_source_file_stdio_named.c in Sources */,
 				4B01D6AD15B2F46B002D5007 /* zip_discard.c in Sources */,
 				4B00CA25242F59D700E0B71C /* zip_pkware.c in Sources */,
 				4B01D6AE15B2F46B002D5007 /* zip_entry.c in Sources */,
diff --git a/lib/zip_source_file_stdio_write.c b/lib/zip_source_file_stdio_named.c
similarity index 96%
rename from lib/zip_source_file_stdio_write.c
rename to lib/zip_source_file_stdio_named.c
index 30054c4..84f57a4 100644
--- a/lib/zip_source_file_stdio_write.c
+++ b/lib/zip_source_file_stdio_named.c
@@ -1,6 +1,6 @@
 /*
-  zip_source_file_stdio_write.c -- read/write stdio file source implementation
-  Copyright (C) 2020 Dieter Baron and Thomas Klausner
+  zip_source_file_stdio_named.c -- source for stdio file opened by name
+  Copyright (C) 1999-2020 Dieter Baron and Thomas Klausner
 
   This file is part of libzip, a library to manipulate ZIP archives.
   The authors can be contacted at <libzip@nih.at>
@@ -62,7 +62,7 @@
 static zip_int64_t _zip_stdio_op_write(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len);
 
 /* clang-format off */
-static zip_source_file_operations_t ops_stdio_write = {
+static zip_source_file_operations_t ops_stdio_named = {
     _zip_stdio_op_close,
     _zip_stdio_op_commit_write,
     _zip_stdio_op_create_temp_output,
@@ -99,7 +99,7 @@
 	return NULL;
     }
 
-    return zip_source_file_common_new(fname, NULL, start, length, NULL, &ops_stdio_write, NULL, error);
+    return zip_source_file_common_new(fname, NULL, start, length, NULL, &ops_stdio_named, NULL, error);
 }
 
 
diff --git a/lib/zip_source_file_win32.c b/lib/zip_source_file_win32.c
index f79d95f..2fe838f 100644
--- a/lib/zip_source_file_win32.c
+++ b/lib/zip_source_file_win32.c
@@ -132,18 +132,6 @@
 
 
 zip_int64_t
-_zip_win32_op_write(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len) {
-    DWORD ret;
-    if (!WriteFile((HANDLE)ctx->fout, data, (DWORD)len, &ret, NULL) || ret != len) {
-        zip_error_set(&ctx->error, ZIP_ER_WRITE, _zip_win32_error_to_errno(GetLastError()));
-        return -1;
-    }
-
-    return (zip_int64_t)ret;
-}
-
-
-zip_int64_t
 _zip_win32_op_tell(zip_source_file_context_t *ctx, void *f) {
     LARGE_INTEGER zero;
     LARGE_INTEGER new_offset;
diff --git a/lib/zip_source_file_win32.h b/lib/zip_source_file_win32.h
index 5d925da..5092e63 100644
--- a/lib/zip_source_file_win32.h
+++ b/lib/zip_source_file_win32.h
@@ -47,7 +47,7 @@
 
 #include "zip_source_file.h"
 
-struct zip_source_file_win32_write_operations {
+struct zip_win32_file_operations {
     char *(*allocate_tempname)(const char *name, size_t extra_chars, size_t *lengthp);
     HANDLE (__stdcall *create_file)(const void *name, DWORD access, DWORD share_mode, PSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD file_attributes, HANDLE template_file);
     BOOL (__stdcall *delete_file)(const void *name);
@@ -59,15 +59,14 @@
     char *(*string_duplicate)(const char *string);
 };
 
-typedef struct zip_source_file_win32_write_operations zip_source_file_win32_write_operations_t;
+typedef struct zip_win32_file_operations zip_win32_file_operations_t;
 
-extern zip_source_file_operations_t _zip_source_file_win32_write_ops;
+extern zip_source_file_operations_t _zip_source_file_win32_named_ops;
 
 void _zip_win32_op_close(zip_source_file_context_t *ctx);
 zip_int64_t _zip_win32_op_read(zip_source_file_context_t *ctx, void *buf, zip_uint64_t len);
 bool _zip_win32_op_seek(zip_source_file_context_t *ctx, void *f, zip_int64_t offset, int whence);
 zip_int64_t _zip_win32_op_tell(zip_source_file_context_t *ctx, void *f);
-zip_int64_t _zip_win32_op_write(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len);
 
 bool _zip_filetime_to_time_t(FILETIME ft, time_t *t);
 int _zip_win32_error_to_errno(DWORD win32err);
diff --git a/lib/zip_source_file_win32_ansi.c b/lib/zip_source_file_win32_ansi.c
index 1869a12..573b74e 100644
--- a/lib/zip_source_file_win32_ansi.c
+++ b/lib/zip_source_file_win32_ansi.c
@@ -1,5 +1,5 @@
 /*
-  zip_source_file_win32_ansi.c -- Windows file source write operations for ANSI interface
+  zip_source_file_win32_ansi.c -- source for Windows file opened by ANSI name
   Copyright (C) 1999-2020 Dieter Baron and Thomas Klausner
 
   This file is part of libzip, a library to manipulate ZIP archives.
@@ -36,7 +36,7 @@
 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, zip_uint32_t i);
 
-zip_source_file_win32_write_operations_t ops_ansi = {
+zip_win32_file_operations_t ops_ansi = {
     ansi_allocate_tempname,
     CreateFileA,
     DeleteFileA,
@@ -64,7 +64,7 @@
     return NULL;
     }
 
-    return zip_source_file_common_new(fname, NULL, start, length, NULL, &_zip_source_file_win32_write_ops, &ops_ansi, error);
+    return zip_source_file_common_new(fname, NULL, start, length, NULL, &_zip_source_file_win32_named_ops, &ops_ansi, error);
 }
 
 
diff --git a/lib/zip_source_file_win32_write.c b/lib/zip_source_file_win32_named.c
similarity index 62%
rename from lib/zip_source_file_win32_write.c
rename to lib/zip_source_file_win32_named.c
index 6636e34..dd3c6cf 100644
--- a/lib/zip_source_file_win32_write.c
+++ b/lib/zip_source_file_win32_named.c
@@ -1,5 +1,5 @@
 /*
-  zip_source_file_win32_write.c -- read/write Windows file source implementation
+  zip_source_file_win32_named.c -- source for Windows file opened by name
   Copyright (C) 1999-2020 Dieter Baron and Thomas Klausner
 
   This file is part of libzip, a library to manipulate ZIP archives.
@@ -33,58 +33,58 @@
 
 #include "zip_source_file_win32.h"
 
-static zip_int64_t _zip_win32_write_op_commit_write(zip_source_file_context_t *ctx);
-static zip_int64_t _zip_win32_write_op_create_temp_output(zip_source_file_context_t *ctx);
-static zip_int64_t _zip_win32_write_op_commit_write(zip_source_file_context_t *ctx);
-static bool _zip_win32_write_op_open(zip_source_file_context_t *ctx);
-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(zip_source_file_context_t *ctx, const char *string);
+static zip_int64_t _zip_win32_named_op_commit_write(zip_source_file_context_t *ctx);
+static zip_int64_t _zip_win32_named_op_create_temp_output(zip_source_file_context_t *ctx);
+static bool _zip_win32_named_op_open(zip_source_file_context_t *ctx);
+static zip_int64_t _zip_win32_named_op_remove(zip_source_file_context_t *ctx);
+static void _zip_win32_named_op_rollback_write(zip_source_file_context_t *ctx);
+static bool _zip_win32_named_op_stat(zip_source_file_context_t *ctx, zip_source_file_stat_t *st);
+static char *_zip_win32_named_op_string_duplicate(zip_source_file_context_t *ctx, const char *string);
+static zip_int64_t _zip_win32_named_op_write(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len);
 
-static HANDLE win32_write_open(zip_source_file_context_t *ctx, const char *name, bool temporary, PSECURITY_ATTRIBUTES security_attributes);
+static HANDLE win32_named_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_ops = {
+zip_source_file_operations_t _zip_source_file_win32_named_ops = {
     _zip_win32_op_close,
-    _zip_win32_write_op_commit_write,
-    _zip_win32_write_op_create_temp_output,
+    _zip_win32_named_op_commit_write,
+    _zip_win32_named_op_create_temp_output,
     NULL,
-    _zip_win32_write_op_open,
+    _zip_win32_named_op_open,
     _zip_win32_op_read,
-    _zip_win32_write_op_remove,
-    _zip_win32_write_op_rollback_write,
+    _zip_win32_named_op_remove,
+    _zip_win32_named_op_rollback_write,
     _zip_win32_op_seek,
-    _zip_win32_write_op_stat,
-    _zip_win32_write_strdup,
+    _zip_win32_named_op_stat,
+    _zip_win32_named_op_string_duplicate,
     _zip_win32_op_tell,
-    _zip_win32_op_write
+    _zip_win32_named_op_write
 };
 /* clang-format on */
 
 static zip_int64_t
-_zip_win32_write_op_commit_write(zip_source_file_context_t *ctx) {
-    zip_source_file_win32_write_operations_t *write_ops = (zip_source_file_win32_write_operations_t *)ctx->ops_userdata;
+_zip_win32_named_op_commit_write(zip_source_file_context_t *ctx) {
+    _zip_win32_file_operations_t *file_ops = (_zip_win32_file_operations_t *)ctx->ops_userdata;
     
     if (!CloseHandle((HANDLE)ctx->fout)) {
         zip_error_set(&ctx->error, ZIP_ER_WRITE, _zip_win32_error_to_errno(GetLastError()));
         return -1;
     }
     
-    DWORD attributes = write_ops->get_file_attributes(ctx->tmpname);
+    DWORD attributes = file_ops->get_file_attributes(ctx->tmpname);
     if (attributes == INVALID_FILE_ATTRIBUTES) {
         zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_win32_error_to_errno(GetLastError()));
         return -1;
     }
 
     if (attributes & FILE_ATTRIBUTE_TEMPORARY) {
-        if (!write_ops->set_file_attributes(ctx->tmpname, attributes & ~FILE_ATTRIBUTE_TEMPORARY)) {
+        if (!file_ops->set_file_attributes(ctx->tmpname, attributes & ~FILE_ATTRIBUTE_TEMPORARY)) {
             zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_win32_error_to_errno(GetLastError()));
             return -1;
         }
     }
 
-    if (!write_ops->move_file(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) {
+    if (!file_ops->move_file(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) {
         zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_win32_error_to_errno(GetLastError()));
         return -1;
     }
@@ -93,8 +93,8 @@
 }
 
 static zip_int64_t
-_zip_win32_write_op_create_temp_output(zip_source_file_context_t *ctx) {
-    zip_source_file_win32_write_operations_t *write_ops = (zip_source_file_win32_write_operations_t *)ctx->ops_userdata;
+_zip_win32_named_op_create_temp_output(zip_source_file_context_t *ctx) {
+    _zip_win32_file_operations_t *file_ops = (_zip_win32_file_operations_t *)ctx->ops_userdata;
 
     zip_uint32_t value, i;
     HANDLE th = INVALID_HANDLE_VALUE;
@@ -125,15 +125,15 @@
     value = (zip_uint32_t)(GetTickCount64() & 0xffffffff);
 #endif
     
-    if ((tempname = write_ops->allocate_tempname(ctx->fname, 10, &tempname_size)) == NULL) {
+    if ((tempname = file_ops->allocate_tempname(ctx->fname, 10, &tempname_size)) == NULL) {
         zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0);
         return -1;
     }
         
     for (i = 0; i < 1024 && th == INVALID_HANDLE_VALUE; i++) {
-        write_ops->make_tempname(tempname, tempname_size, ctx->fname, value + i);
+        file_ops->make_tempname(tempname, tempname_size, ctx->fname, value + i);
         
-        th = win32_write_open(ctx, tempname, true, psa);
+        th = win32_named_open(ctx, tempname, true, psa);
         if (th == INVALID_HANDLE_VALUE && GetLastError() != ERROR_FILE_EXISTS)
             break;
     }
@@ -154,8 +154,8 @@
 
 
 static bool
-_zip_win32_write_op_open(zip_source_file_context_t *ctx) {
-    HANDLE h = win32_write_open(ctx, ctx->fname, false, NULL);
+_zip_win32_named_op_open(zip_source_file_context_t *ctx) {
+    HANDLE h = win32_named_open(ctx, ctx->fname, false, NULL);
     
     if (h == INVALID_HANDLE_VALUE) {
         return false;
@@ -167,10 +167,10 @@
 
 
 static zip_int64_t
-_zip_win32_write_op_remove(zip_source_file_context_t *ctx) {
-    zip_source_file_win32_write_operations_t *write_ops = (zip_source_file_win32_write_operations_t *)ctx->ops_userdata;
+_zip_win32_named_op_remove(zip_source_file_context_t *ctx) {
+    _zip_win32_file_operations_t *file_ops = (_zip_win32_file_operations_t *)ctx->ops_userdata;
 
-    if (!write_ops->delete_file(ctx->fname)) {
+    if (!file_ops->delete_file(ctx->fname)) {
         zip_error_set(&ctx->error, ZIP_ER_REMOVE, _zip_win32_error_to_errno(GetLastError()));
         return -1;
     }
@@ -180,23 +180,23 @@
 
 
 static void
-_zip_win32_write_op_rollback_write(zip_source_file_context_t *ctx) {
-    zip_source_file_win32_write_operations_t *write_ops = (zip_source_file_win32_write_operations_t *)ctx->ops_userdata;
+_zip_win32_named_op_rollback_write(zip_source_file_context_t *ctx) {
+    _zip_win32_file_operations_t *file_ops = (_zip_win32_file_operations_t *)ctx->ops_userdata;
 
     if (ctx->fout) {
         CloseHandle((HANDLE)ctx->fout);
     }
-    write_ops->delete_file(ctx->tmpname);
+    file_ops->delete_file(ctx->tmpname);
 }
 
 
 static bool
-_zip_win32_write_op_stat(zip_source_file_context_t *ctx, zip_source_file_stat_t *st) {
-    zip_source_file_win32_write_operations_t *write_ops = (zip_source_file_win32_write_operations_t *)ctx->ops_userdata;
+_zip_win32_named_op_stat(zip_source_file_context_t *ctx, zip_source_file_stat_t *st) {
+    _zip_win32_file_operations_t *file_ops = (_zip_win32_file_operations_t *)ctx->ops_userdata;
     
     WIN32_FILE_ATTRIBUTE_DATA file_attributes;
 
-    if (!write_ops->get_file_attributes_ex(ctx->fname, GetFileExInfoStandard, &file_attributes)) {
+    if (!file_ops->get_file_attributes_ex(ctx->fname, GetFileExInfoStandard, &file_attributes)) {
         DWORD error = GetLastError();
         if (error == ERROR_FILE_NOT_FOUND) {
             st->exists = false;
@@ -221,17 +221,28 @@
 
 
 static char *
-_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;
+_zip_win32_named_op_string_duplicate(zip_source_file_context_t *ctx, const char *string) {
+    _zip_win32_file_operations_t *file_ops = (_zip_win32_file_operations_t *)ctx->ops_userdata;
 
-    return write_ops->string_duplicate(string);
+    return file_ops->string_duplicate(string);
 }
 
 
+static zip_int64_t
+_zip_win32_named_op_write(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len) {
+    DWORD ret;
+    if (!WriteFile((HANDLE)ctx->fout, data, (DWORD)len, &ret, NULL) || ret != len) {
+        zip_error_set(&ctx->error, ZIP_ER_WRITE, _zip_win32_error_to_errno(GetLastError()));
+        return -1;
+    }
+    
+    return (zip_int64_t)ret;
+}
+
 
 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;
+win32_named_open(zip_source_file_context_t *ctx, const char *name, bool temporary, PSECURITY_ATTRIBUTES security_attributes) {
+    _zip_win32_file_operations_t *file_ops = (_zip_win32_file_operations_t *)ctx->ops_userdata;
 
     DWORD access = GENERIC_READ;
     DWORD share_mode = FILE_SHARE_READ | FILE_SHARE_WRITE;
@@ -245,7 +256,7 @@
         file_attributes = FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_TEMPORARY;
     }
 
-    HANDLE h = write_ops->create_file(name, access, share_mode, security_attributes, creation_disposition, file_attributes, NULL);
+    HANDLE h = file_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()));
diff --git a/lib/zip_source_file_win32_utf16.c b/lib/zip_source_file_win32_utf16.c
index f515528..8d48550 100644
--- a/lib/zip_source_file_win32_utf16.c
+++ b/lib/zip_source_file_win32_utf16.c
@@ -1,5 +1,5 @@
 /*
-  zip_source_file_win32_utf16.c -- Windows file source write operations for UTF-16 interface
+  zip_source_file_win32_utf16.c -- source for Windows file opened by UTF-16 name
   Copyright (C) 1999-2020 Dieter Baron and Thomas Klausner
 
   This file is part of libzip, a library to manipulate ZIP archives.
@@ -38,7 +38,7 @@
 static void utf16_make_tempname(char *buf, size_t len, const char *name, zip_uint32_t i);
 static char *utf16_strdup(const char *string);
 
-zip_source_file_win32_write_operations_t ops_utf16 = {
+zip_win32_file_operations_t ops_utf16 = {
     utf16_allocate_tempname,
     utf16_create_file,
     DeleteFileW,
@@ -67,7 +67,7 @@
     }
 
 
-    return zip_source_file_common_new((const char *)fname, NULL, start, length, NULL, &_zip_source_file_win32_write_ops, &ops_utf16, error);
+    return zip_source_file_common_new((const char *)fname, NULL, start, length, NULL, &_zip_source_file_win32_named_ops, &ops_utf16, error);
 }
 
 
diff --git a/lib/zip_source_file_win32_utf8.c b/lib/zip_source_file_win32_utf8.c
index eaeacdc..4f258bc 100644
--- a/lib/zip_source_file_win32_utf8.c
+++ b/lib/zip_source_file_win32_utf8.c
@@ -1,5 +1,5 @@
 /*
-  zip_source_file_win32_ansi.c -- read/write Windows UTF-8 file source implementation
+  zip_source_file_win32_ansi.c -- source for Windows file opened by UTF-8 name
   Copyright (C) 1999-2020 Dieter Baron and Thomas Klausner
 
   This file is part of libzip, a library to manipulate ZIP archives.
