Mercurial > hg > nginx
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); |