Mercurial > hg > nginx-quic
comparison src/os/win32/ngx_files.c @ 9042:96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
This makes it possible to upload files with non-ASCII characters
when using the dav module (ticket #1433).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 23 Feb 2023 20:49:55 +0300 |
parents | 4b06186670ed |
children | e818ed227735 |
comparison
equal
deleted
inserted
replaced
9041:4b06186670ed | 9042:96d894b38667 |
---|---|
234 failed: | 234 failed: |
235 | 235 |
236 if (u != utf16) { | 236 if (u != utf16) { |
237 err = ngx_errno; | 237 err = ngx_errno; |
238 ngx_free(u); | 238 ngx_free(u); |
239 ngx_set_errno(err); | |
240 } | |
241 | |
242 return rc; | |
243 } | |
244 | |
245 | |
246 ngx_int_t | |
247 ngx_rename_file(u_char *from, u_char *to) | |
248 { | |
249 long rc; | |
250 size_t len; | |
251 u_short *fu, *tu; | |
252 ngx_err_t err; | |
253 u_short utf16f[NGX_UTF16_BUFLEN]; | |
254 u_short utf16t[NGX_UTF16_BUFLEN]; | |
255 | |
256 len = NGX_UTF16_BUFLEN; | |
257 fu = ngx_utf8_to_utf16(utf16f, from, &len, 0); | |
258 | |
259 if (fu == NULL) { | |
260 return NGX_FILE_ERROR; | |
261 } | |
262 | |
263 rc = NGX_FILE_ERROR; | |
264 tu = NULL; | |
265 | |
266 if (ngx_win32_check_filename(fu, len, 0) != NGX_OK) { | |
267 goto failed; | |
268 } | |
269 | |
270 len = NGX_UTF16_BUFLEN; | |
271 tu = ngx_utf8_to_utf16(utf16t, to, &len, 0); | |
272 | |
273 if (tu == NULL) { | |
274 goto failed; | |
275 } | |
276 | |
277 if (ngx_win32_check_filename(tu, len, 1) != NGX_OK) { | |
278 goto failed; | |
279 } | |
280 | |
281 rc = MoveFileW(fu, tu); | |
282 | |
283 failed: | |
284 | |
285 if (fu != utf16f) { | |
286 err = ngx_errno; | |
287 ngx_free(fu); | |
288 ngx_set_errno(err); | |
289 } | |
290 | |
291 if (tu && tu != utf16t) { | |
292 err = ngx_errno; | |
293 ngx_free(tu); | |
239 ngx_set_errno(err); | 294 ngx_set_errno(err); |
240 } | 295 } |
241 | 296 |
242 return rc; | 297 return rc; |
243 } | 298 } |