diff options
author | Igor Sysoev <igor@sysoev.ru> | 2009-09-16 13:30:13 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2009-09-16 13:30:13 +0000 |
commit | 866e958c5dea5f985b26ba29c92a3c4af2bb51af (patch) | |
tree | 38061c71a3dd0d9e679f83b9f766c9f3478b2645 /src/os/win32/ngx_files.c | |
parent | 7e4e5e165f81697faddce56bdf1ebaf586b72c16 (diff) | |
download | nginx-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.c | 20 |
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; } |