1- From f20ec74dfef1ad0e2792a33bef9173679398c3c8 Mon Sep 17 00:00:00 2001
1+ From 3e6a8cbee0f585286940120a0e3feec9fe3bad7a Mon Sep 17 00:00:00 2001
22From: myfreeer <myfreeer@users.noreply.github.com>
3- Date: Fri, 20 Jul 2018 14:10:25 +0800
3+ Date: Sun, 30 Dec 2018 20:40:21 +0800
44Subject: [PATCH] win32: force utf-8 encoding in ngx_dir_t
55
66---
7- src/os/win32/ngx_files.c | 29 +++++++++++++++++++++++++++ --
7+ src/os/win32/ngx_files.c | 27 ++++++++++++++++++++++--- --
88 src/os/win32/ngx_files.h | 8 +++++---
9- 2 files changed, 32 insertions(+), 5 deletions(-)
9+ 2 files changed, 27 insertions(+), 8 deletions(-)
1010
1111diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c
12- index 55d7f76..bb3960a 100644
12+ index 0b131b5..f2d07e1 100644
1313--- a/src/os/win32/ngx_files.c
1414+++ b/src/os/win32/ngx_files.c
15- @@ -427,19 +427,39 @@ ngx_realpath(u_char *path, u_char *resolved)
16- ngx_int_t
17- ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
15+ @@ -429,6 +429,9 @@ ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
1816 {
17+ u_char *pattern, *p;
18+ ngx_err_t err;
1919+ size_t len;
2020+ u_short *u;
2121+ u_short utf16[NGX_UTF16_BUFLEN];
22- ngx_cpystrn(name->data + name->len, NGX_DIR_MASK, NGX_DIR_MASK_LEN + 1);
2322
24- - dir->dir = FindFirstFile((const char *) name->data, &dir->finddata);
23+ pattern = malloc(name->len + 3);
24+ if (pattern == NULL) {
25+ @@ -436,21 +439,30 @@ ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
26+ }
27+
28+ p = ngx_cpymem(pattern, name->data, name->len);
29+ -
30+ *p++ = '/';
31+ *p++ = '*';
32+ *p = '\0';
33+
34+ - dir->dir = FindFirstFile((const char *) pattern, &dir->finddata);
2535+ len = NGX_UTF16_BUFLEN;
26- + u = ngx_utf8_to_utf16(utf16, name->data , &len);
27- +
36+ + u = ngx_utf8_to_utf16(utf16, pattern , &len);
37+ + ngx_free(pattern);
2838+ if (u == NULL) {
2939+ return NGX_ERROR;
3040+ }
31- +
32- + dir->dir = FindFirstFileW((LPCWSTR) u, &dir->finddata);
33-
34- name->data[name->len] = '\0';
3541
42+ + dir->dir = FindFirstFileW((LPCWSTR) u, &dir->finddata);
43+ + if (u != utf16) {
44+ + ngx_free(u);
45+ + }
3646 if (dir->dir == INVALID_HANDLE_VALUE) {
37- + if (u != utf16) {
38- + ngx_free(u );
39- + }
47+ err = ngx_errno;
48+ - ngx_free(pattern );
49+ ngx_set_errno(err);
4050 return NGX_ERROR;
4151 }
4252
53+ - ngx_free(pattern);
4354+ dir->utf8_length = WideCharToMultiByte(CP_UTF8, 0, dir->finddata.cFileName, -1, NULL, 0, NULL, NULL);
4455+ dir->utf8 = calloc(dir->utf8_length, sizeof(char));
4556+ WideCharToMultiByte(CP_UTF8, 0, dir->finddata.cFileName, -1, dir->utf8, dir->utf8_length, NULL, NULL);
46- +
57+
4758 dir->valid_info = 1;
4859 dir->ready = 1;
49-
50- + if (u != utf16) {
51- + ngx_free(u);
52- + }
53- return NGX_OK;
54- }
55-
56- @@ -452,8 +472,12 @@ ngx_read_dir(ngx_dir_t *dir)
60+ @@ -467,8 +479,12 @@ ngx_read_dir(ngx_dir_t *dir)
5761 return NGX_OK;
5862 }
5963
@@ -67,7 +71,7 @@ index 55d7f76..bb3960a 100644
6771 return NGX_OK;
6872 }
6973
70- @@ -464 ,6 +488 ,7 @@ ngx_read_dir(ngx_dir_t *dir)
74+ @@ -479 ,6 +495 ,7 @@ ngx_read_dir(ngx_dir_t *dir)
7175 ngx_int_t
7276 ngx_close_dir(ngx_dir_t *dir)
7377 {
@@ -76,7 +80,7 @@ index 55d7f76..bb3960a 100644
7680 return NGX_ERROR;
7781 }
7882diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h
79- index 895daea..da98307 100644
83+ index 6eb720e..57bfe7e 100644
8084--- a/src/os/win32/ngx_files.h
8185+++ b/src/os/win32/ngx_files.h
8286@@ -30,7 +30,9 @@ typedef struct {
@@ -90,7 +94,7 @@ index 895daea..da98307 100644
9094
9195 unsigned valid_info:1;
9296 unsigned type:1;
93- @@ -208 ,8 +210 ,8 @@ ngx_int_t ngx_close_dir(ngx_dir_t *dir);
97+ @@ -205 ,8 +207 ,8 @@ ngx_int_t ngx_close_dir(ngx_dir_t *dir);
9498 #define ngx_dir_access(a) (a)
9599
96100
@@ -102,5 +106,5 @@ index 895daea..da98307 100644
102106 ngx_int_t ngx_de_info(u_char *name, ngx_dir_t *dir);
103107 #define ngx_de_info_n "dummy()"
104108- -
105- 2.18.0
109+ 2.19.1
106110
0 commit comments