comparison src/os/win32/ngx_files.c @ 8139:e818ed227735

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.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 23 Feb 2023 20:49:57 +0300
parents 96d894b38667
children c33eb93f9c7a
comparison
equal deleted inserted replaced
8138:96d894b38667 8139:e818ed227735
50 fd = CreateFileW(u, mode, 50 fd = CreateFileW(u, mode,
51 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, 51 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
52 NULL, create, FILE_FLAG_BACKUP_SEMANTICS, NULL); 52 NULL, create, FILE_FLAG_BACKUP_SEMANTICS, NULL);
53 53
54 failed: 54 failed:
55
56 if (u != utf16) {
57 err = ngx_errno;
58 ngx_free(u);
59 ngx_set_errno(err);
60 }
61
62 return fd;
63 }
64
65
66 ngx_fd_t
67 ngx_open_tempfile(u_char *name, ngx_uint_t persistent, ngx_uint_t access)
68 {
69 size_t len;
70 u_short *u;
71 ngx_fd_t fd;
72 ngx_err_t err;
73 u_short utf16[NGX_UTF16_BUFLEN];
74
75 len = NGX_UTF16_BUFLEN;
76 u = ngx_utf8_to_utf16(utf16, name, &len, 0);
77
78 if (u == NULL) {
79 return INVALID_HANDLE_VALUE;
80 }
81
82 fd = CreateFileW(u,
83 GENERIC_READ|GENERIC_WRITE,
84 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
85 NULL,
86 CREATE_NEW,
87 persistent ? 0:
88 FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE,
89 NULL);
55 90
56 if (u != utf16) { 91 if (u != utf16) {
57 err = ngx_errno; 92 err = ngx_errno;
58 ngx_free(u); 93 ngx_free(u);
59 ngx_set_errno(err); 94 ngx_set_errno(err);