aboutsummaryrefslogtreecommitdiff
path: root/src/os/win32/ngx_files.c
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2023-02-23 20:49:44 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2023-02-23 20:49:44 +0300
commit1edc23cc84a62afdec2286235286a47e1259ef11 (patch)
tree7c11668e428778a4c79d2dacfbaba58aaa83cce8 /src/os/win32/ngx_files.c
parent99d5ad72a48811c3939a74a54330d7fd5517a5ab (diff)
downloadnginx-1edc23cc84a62afdec2286235286a47e1259ef11.tar.gz
nginx-1edc23cc84a62afdec2286235286a47e1259ef11.zip
Win32: non-ASCII directory names support in ngx_getcwd().
This makes it possible to start nginx without a prefix explicitly set in a directory with non-ASCII characters in it.
Diffstat (limited to 'src/os/win32/ngx_files.c')
-rw-r--r--src/os/win32/ngx_files.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c
index 360f14f04..c09600643 100644
--- a/src/os/win32/ngx_files.c
+++ b/src/os/win32/ngx_files.c
@@ -429,6 +429,40 @@ ngx_realpath(u_char *path, u_char *resolved)
}
+size_t
+ngx_getcwd(u_char *buf, size_t size)
+{
+ u_char *p;
+ size_t n;
+ u_short utf16[NGX_MAX_PATH];
+
+ n = GetCurrentDirectoryW(NGX_MAX_PATH, utf16);
+
+ if (n == 0) {
+ return 0;
+ }
+
+ if (n > NGX_MAX_PATH) {
+ ngx_set_errno(ERROR_INSUFFICIENT_BUFFER);
+ return 0;
+ }
+
+ p = ngx_utf16_to_utf8(buf, utf16, &size, NULL);
+
+ if (p == NULL) {
+ return 0;
+ }
+
+ if (p != buf) {
+ ngx_free(p);
+ ngx_set_errno(ERROR_INSUFFICIENT_BUFFER);
+ return 0;
+ }
+
+ return size - 1;
+}
+
+
ngx_int_t
ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
{