diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2023-02-23 20:49:44 +0300 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2023-02-23 20:49:44 +0300 |
commit | 1edc23cc84a62afdec2286235286a47e1259ef11 (patch) | |
tree | 7c11668e428778a4c79d2dacfbaba58aaa83cce8 /src/os/win32/ngx_files.c | |
parent | 99d5ad72a48811c3939a74a54330d7fd5517a5ab (diff) | |
download | nginx-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.c | 34 |
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) { |