]> git.kaiwu.me - nginx.git/commitdiff
win32 ngx_file_info() utf8 support
authorIgor Sysoev <igor@sysoev.ru>
Wed, 16 Sep 2009 13:30:13 +0000 (13:30 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 16 Sep 2009 13:30:13 +0000 (13:30 +0000)
src/os/win32/ngx_files.c

index d86b22be07109fb6407ff699fbb76b3f04d382f4..e4c42c79d5825189057380939c9c6343f7ef1a58 100644 (file)
@@ -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;
 }