win32 ngx_file_info() utf8 support
diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c
index d86b22b..e4c42c7 100644
--- a/src/os/win32/ngx_files.c
+++ b/src/os/win32/ngx_files.c
@@ -319,14 +319,26 @@
ngx_int_t
ngx_file_info(u_char *file, ngx_file_info_t *sb)
{
- WIN32_FILE_ATTRIBUTE_DATA fa;
+ long rc;
+ u_short *u;
+ ngx_err_t err;
+ WIN32_FILE_ATTRIBUTE_DATA fa;
+ u_short utf16[NGX_UTF16_BUFLEN];
- /* NT4 and Win98 */
+ u = ngx_utf8_to_utf16(utf16, file, NGX_UTF16_BUFLEN);
- if (GetFileAttributesEx((char *) file, GetFileExInfoStandard, &fa) == 0) {
+ if (u == NULL) {
return NGX_FILE_ERROR;
}
+ rc = GetFileAttributesExW(u, GetFileExInfoStandard, &fa);
+
+ if (u != utf16) {
+ err = ngx_errno;
+ ngx_free(u);
+ ngx_set_errno(err);
+ }
+
sb->dwFileAttributes = fa.dwFileAttributes;
sb->ftCreationTime = fa.ftCreationTime;
sb->ftLastAccessTime = fa.ftLastAccessTime;
@@ -334,7 +346,7 @@
sb->nFileSizeHigh = fa.nFileSizeHigh;
sb->nFileSizeLow = fa.nFileSizeLow;
- return ~NGX_FILE_ERROR;
+ return rc;
}