aboutsummaryrefslogtreecommitdiff
path: root/src/os/win32/ngx_files.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-09-16 13:30:13 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-09-16 13:30:13 +0000
commit866e958c5dea5f985b26ba29c92a3c4af2bb51af (patch)
tree38061c71a3dd0d9e679f83b9f766c9f3478b2645 /src/os/win32/ngx_files.c
parent7e4e5e165f81697faddce56bdf1ebaf586b72c16 (diff)
downloadnginx-866e958c5dea5f985b26ba29c92a3c4af2bb51af.tar.gz
nginx-866e958c5dea5f985b26ba29c92a3c4af2bb51af.zip
win32 ngx_file_info() utf8 support
Diffstat (limited to 'src/os/win32/ngx_files.c')
-rw-r--r--src/os/win32/ngx_files.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c
index d86b22be0..e4c42c79d 100644
--- a/src/os/win32/ngx_files.c
+++ b/src/os/win32/ngx_files.c
@@ -319,14 +319,26 @@ ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_log_t *log)
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 @@ ngx_file_info(u_char *file, ngx_file_info_t *sb)
sb->nFileSizeHigh = fa.nFileSizeHigh;
sb->nFileSizeLow = fa.nFileSizeLow;
- return ~NGX_FILE_ERROR;
+ return rc;
}