comparison src/os/win32/ngx_files.c @ 8138: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
8137:4b06186670ed 8138: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 }