[nginx] Win32: non-ASCII names support in ngx_open_tempfile().

Sergey Kandaurov pluknet at nginx.com
Fri Feb 24 10:33:14 UTC 2023


details:   https://hg.nginx.org/nginx/rev/e818ed227735
branches:  
changeset: 8139:e818ed227735
user:      Maxim Dounin <mdounin at mdounin.ru>
date:      Thu Feb 23 20:49:57 2023 +0300
description:
Win32: non-ASCII names support in ngx_open_tempfile().

This makes it possible to use temporary directories with non-ASCII characters,
either explicitly or via a prefix with non-ASCII characters in it.

diffstat:

 src/os/win32/ngx_files.c |  35 +++++++++++++++++++++++++++++++++++
 src/os/win32/ngx_files.h |  12 ++----------
 2 files changed, 37 insertions(+), 10 deletions(-)

diffs (67 lines):

diff -r 96d894b38667 -r e818ed227735 src/os/win32/ngx_files.c
--- a/src/os/win32/ngx_files.c	Thu Feb 23 20:49:55 2023 +0300
+++ b/src/os/win32/ngx_files.c	Thu Feb 23 20:49:57 2023 +0300
@@ -63,6 +63,41 @@ failed:
 }
 
 
+ngx_fd_t
+ngx_open_tempfile(u_char *name, ngx_uint_t persistent, ngx_uint_t access)
+{
+    size_t      len;
+    u_short    *u;
+    ngx_fd_t    fd;
+    ngx_err_t   err;
+    u_short     utf16[NGX_UTF16_BUFLEN];
+
+    len = NGX_UTF16_BUFLEN;
+    u = ngx_utf8_to_utf16(utf16, name, &len, 0);
+
+    if (u == NULL) {
+        return INVALID_HANDLE_VALUE;
+    }
+
+    fd = CreateFileW(u,
+                     GENERIC_READ|GENERIC_WRITE,
+                     FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
+                     NULL,
+                     CREATE_NEW,
+                     persistent ? 0:
+                         FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE,
+                     NULL);
+
+    if (u != utf16) {
+        err = ngx_errno;
+        ngx_free(u);
+        ngx_set_errno(err);
+    }
+
+    return fd;
+}
+
+
 ssize_t
 ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset)
 {
diff -r 96d894b38667 -r e818ed227735 src/os/win32/ngx_files.h
--- a/src/os/win32/ngx_files.h	Thu Feb 23 20:49:55 2023 +0300
+++ b/src/os/win32/ngx_files.h	Thu Feb 23 20:49:57 2023 +0300
@@ -90,16 +90,8 @@ ngx_fd_t ngx_open_file(u_char *name, u_l
 #define NGX_FILE_OWNER_ACCESS       0
 
 
-#define ngx_open_tempfile(name, persistent, access)                          \
-    CreateFile((const char *) name,                                          \
-               GENERIC_READ|GENERIC_WRITE,                                   \
-               FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,           \
-               NULL,                                                         \
-               CREATE_NEW,                                                   \
-               persistent ? 0:                                               \
-                   FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE,       \
-               NULL);
-
+ngx_fd_t ngx_open_tempfile(u_char *name, ngx_uint_t persistent,
+    ngx_uint_t access);
 #define ngx_open_tempfile_n         "CreateFile()"
 
 


More information about the nginx-devel mailing list