Skip to content

Commit 8bd3890

Browse files
committed
ngx_files: implement some functions in utf8 encoding
#1
1 parent 68cde5d commit 8bd3890

File tree

1 file changed

+222
-0
lines changed

1 file changed

+222
-0
lines changed
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
From 83460b316515224c0d35f69ba9cd330c22772e3e Mon Sep 17 00:00:00 2001
2+
From: myfreeer <[email protected]>
3+
Date: Mon, 4 Nov 2019 21:44:10 +0800
4+
Subject: [PATCH] ngx_files: implement some functions in utf8 encoding
5+
6+
* ngx_getcwd
7+
* ngx_create_dir
8+
* ngx_delete_dir
9+
* ngx_delete_file
10+
* ngx_rename_file
11+
12+
nginx would initially run in non-ascii dir.
13+
---
14+
src/os/win32/ngx_files.c | 140 +++++++++++++++++++++++++++++++++++++++
15+
src/os/win32/ngx_files.h | 24 +++----
16+
2 files changed, 150 insertions(+), 14 deletions(-)
17+
18+
diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c
19+
index f2d07e1..fc69e6d 100644
20+
--- a/src/os/win32/ngx_files.c
21+
+++ b/src/os/win32/ngx_files.c
22+
@@ -301,6 +301,146 @@ failed:
23+
return rc;
24+
}
25+
26+
+ngx_int_t
27+
+ngx_getcwd(u_char *buf, ngx_int_t size)
28+
+{
29+
+ WCHAR wBuffer[NGX_MAX_PATH];
30+
+ ngx_int_t ret = GetCurrentDirectoryW(NGX_MAX_PATH, wBuffer);
31+
+ if (ret == 0) {
32+
+ return 0;
33+
+ }
34+
+ return WideCharToMultiByte(CP_UTF8, 0, wBuffer, -1, (char *) buf, size, NULL, NULL);
35+
+}
36+
+
37+
+ngx_int_t
38+
+ngx_create_dir(u_char *name, ngx_int_t access)
39+
+{
40+
+ size_t len;
41+
+ long rc;
42+
+ u_short *u;
43+
+ ngx_err_t err;
44+
+ u_short utf16[NGX_UTF16_BUFLEN];
45+
+
46+
+ len = NGX_UTF16_BUFLEN;
47+
+
48+
+ u = ngx_utf8_to_utf16(utf16, name, &len);
49+
+
50+
+ if (u == NULL) {
51+
+ return NGX_FILE_ERROR;
52+
+ }
53+
+
54+
+ rc = CreateDirectoryW((const WCHAR *)u, NULL);
55+
+
56+
+ if (u != utf16) {
57+
+ err = ngx_errno;
58+
+ ngx_free(u);
59+
+ ngx_set_errno(err);
60+
+ }
61+
+
62+
+ return rc;
63+
+}
64+
+
65+
+ngx_int_t
66+
+ngx_delete_dir(u_char *name)
67+
+{
68+
+ size_t len;
69+
+ long rc;
70+
+ u_short *u;
71+
+ ngx_err_t err;
72+
+ u_short utf16[NGX_UTF16_BUFLEN];
73+
+
74+
+ len = NGX_UTF16_BUFLEN;
75+
+
76+
+ u = ngx_utf8_to_utf16(utf16, name, &len);
77+
+
78+
+ if (u == NULL) {
79+
+ return NGX_FILE_ERROR;
80+
+ }
81+
+
82+
+ rc = RemoveDirectoryW((const WCHAR *)u);
83+
+
84+
+ if (u != utf16) {
85+
+ err = ngx_errno;
86+
+ ngx_free(u);
87+
+ ngx_set_errno(err);
88+
+ }
89+
+
90+
+ return rc;
91+
+}
92+
+
93+
+ngx_int_t
94+
+ngx_delete_file(u_char *name)
95+
+{
96+
+ size_t len;
97+
+ long rc;
98+
+ u_short *u;
99+
+ ngx_err_t err;
100+
+ u_short utf16[NGX_UTF16_BUFLEN];
101+
+
102+
+ len = NGX_UTF16_BUFLEN;
103+
+
104+
+ u = ngx_utf8_to_utf16(utf16, name, &len);
105+
+
106+
+ if (u == NULL) {
107+
+ return NGX_FILE_ERROR;
108+
+ }
109+
+
110+
+ rc = DeleteFileW((const WCHAR *)u);
111+
+
112+
+ if (u != utf16) {
113+
+ err = ngx_errno;
114+
+ ngx_free(u);
115+
+ ngx_set_errno(err);
116+
+ }
117+
+
118+
+ return rc;
119+
+}
120+
+
121+
+ngx_int_t
122+
+ngx_rename_file(u_char *o, u_char *n)
123+
+{
124+
+ size_t len1;
125+
+ size_t len2;
126+
+ long rc;
127+
+ u_short *u1;
128+
+ u_short *u2;
129+
+ ngx_err_t err;
130+
+ u_short utf16_1[NGX_UTF16_BUFLEN];
131+
+ u_short utf16_2[NGX_UTF16_BUFLEN];
132+
+
133+
+ len1 = NGX_UTF16_BUFLEN;
134+
+ len2 = NGX_UTF16_BUFLEN;
135+
+
136+
+ u1 = ngx_utf8_to_utf16(utf16_1, o, &len1);
137+
+
138+
+ if (u1 == NULL) {
139+
+ return NGX_FILE_ERROR;
140+
+ }
141+
+
142+
+ rc = NGX_FILE_ERROR;
143+
+ u2 = ngx_utf8_to_utf16(utf16_2, n, &len2);
144+
+
145+
+ if (u2 == NULL) {
146+
+ goto fail1;
147+
+ }
148+
+
149+
+ rc = MoveFileW((const WCHAR *) u1, (const WCHAR *) u2);
150+
+
151+
+ if (u2 != utf16_2) {
152+
+ err = ngx_errno;
153+
+ ngx_free(u2);
154+
+ ngx_set_errno(err);
155+
+ }
156+
+
157+
+fail1:
158+
+ if (u1 != utf16_1) {
159+
+ err = ngx_errno;
160+
+ ngx_free(u1);
161+
+ ngx_set_errno(err);
162+
+ }
163+
+
164+
+ return rc;
165+
+}
166+
167+
ngx_int_t
168+
ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s)
169+
diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h
170+
index 57bfe7e..441a9a1 100644
171+
--- a/src/os/win32/ngx_files.h
172+
+++ b/src/os/win32/ngx_files.h
173+
@@ -120,13 +120,11 @@ ssize_t ngx_write_console(ngx_fd_t fd, void *buf, size_t size);
174+
#define NGX_LINEFEED_SIZE 2
175+
#define NGX_LINEFEED CRLF
176+
177+
+ngx_int_t ngx_delete_file(u_char *name);
178+
+#define ngx_delete_file_n "DeleteFileW()"
179+
180+
-#define ngx_delete_file(name) DeleteFile((const char *) name)
181+
-#define ngx_delete_file_n "DeleteFile()"
182+
-
183+
-
184+
-#define ngx_rename_file(o, n) MoveFile((const char *) o, (const char *) n)
185+
-#define ngx_rename_file_n "MoveFile()"
186+
+ngx_int_t ngx_rename_file(u_char *o, u_char *n);
187+
+#define ngx_rename_file_n "MoveFileW()"
188+
ngx_err_t ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_log_t *log);
189+
190+
191+
@@ -176,8 +174,8 @@ void ngx_close_file_mapping(ngx_file_mapping_t *fm);
192+
193+
u_char *ngx_realpath(u_char *path, u_char *resolved);
194+
#define ngx_realpath_n ""
195+
-#define ngx_getcwd(buf, size) GetCurrentDirectory(size, (char *) buf)
196+
-#define ngx_getcwd_n "GetCurrentDirectory()"
197+
+ngx_int_t ngx_getcwd(u_char *buf, ngx_int_t size);
198+
+#define ngx_getcwd_n "GetCurrentDirectoryW()"
199+
#define ngx_path_separator(c) ((c) == '/' || (c) == '\\')
200+
201+
#define NGX_HAVE_MAX_PATH 1
202+
@@ -195,13 +193,11 @@ ngx_int_t ngx_read_dir(ngx_dir_t *dir);
203+
ngx_int_t ngx_close_dir(ngx_dir_t *dir);
204+
#define ngx_close_dir_n "FindClose()"
205+
206+
+ngx_int_t ngx_create_dir(u_char *name, ngx_int_t access);
207+
+#define ngx_create_dir_n "CreateDirectoryW()"
208+
209+
-#define ngx_create_dir(name, access) CreateDirectory((const char *) name, NULL)
210+
-#define ngx_create_dir_n "CreateDirectory()"
211+
-
212+
-
213+
-#define ngx_delete_dir(name) RemoveDirectory((const char *) name)
214+
-#define ngx_delete_dir_n "RemoveDirectory()"
215+
+ngx_int_t ngx_delete_dir(u_char *name);
216+
+#define ngx_delete_dir_n "RemoveDirectoryW()"
217+
218+
219+
#define ngx_dir_access(a) (a)
220+
--
221+
2.23.0
222+

0 commit comments

Comments
 (0)