Improve naming to better reflect intentions.
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.