Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
This fixes potentially incorrect cache size calculations and non-working "min_free" when using cache in directories with non-ASCII names.
This commit is contained in:
parent
acf3f86572
commit
f4c0711c86
1 changed files with 42 additions and 4 deletions
|
@ -968,11 +968,30 @@ size_t
|
||||||
ngx_fs_bsize(u_char *name)
|
ngx_fs_bsize(u_char *name)
|
||||||
{
|
{
|
||||||
u_long sc, bs, nfree, ncl;
|
u_long sc, bs, nfree, ncl;
|
||||||
|
size_t len;
|
||||||
|
u_short *u;
|
||||||
|
u_short utf16[NGX_UTF16_BUFLEN];
|
||||||
|
|
||||||
if (GetDiskFreeSpace((const char *) name, &sc, &bs, &nfree, &ncl) == 0) {
|
len = NGX_UTF16_BUFLEN;
|
||||||
|
u = ngx_utf8_to_utf16(utf16, name, &len, 0);
|
||||||
|
|
||||||
|
if (u == NULL) {
|
||||||
return 512;
|
return 512;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GetDiskFreeSpaceW(u, &sc, &bs, &nfree, &ncl) == 0) {
|
||||||
|
|
||||||
|
if (u != utf16) {
|
||||||
|
ngx_free(u);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 512;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (u != utf16) {
|
||||||
|
ngx_free(u);
|
||||||
|
}
|
||||||
|
|
||||||
return sc * bs;
|
return sc * bs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -980,12 +999,31 @@ ngx_fs_bsize(u_char *name)
|
||||||
off_t
|
off_t
|
||||||
ngx_fs_available(u_char *name)
|
ngx_fs_available(u_char *name)
|
||||||
{
|
{
|
||||||
|
size_t len;
|
||||||
|
u_short *u;
|
||||||
ULARGE_INTEGER navail;
|
ULARGE_INTEGER navail;
|
||||||
|
u_short utf16[NGX_UTF16_BUFLEN];
|
||||||
|
|
||||||
if (GetDiskFreeSpaceEx((const char *) name, &navail, NULL, NULL) == 0) {
|
len = NGX_UTF16_BUFLEN;
|
||||||
|
u = ngx_utf8_to_utf16(utf16, name, &len, 0);
|
||||||
|
|
||||||
|
if (u == NULL) {
|
||||||
return NGX_MAX_OFF_T_VALUE;
|
return NGX_MAX_OFF_T_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GetDiskFreeSpaceExW(u, &navail, NULL, NULL) == 0) {
|
||||||
|
|
||||||
|
if (u != utf16) {
|
||||||
|
ngx_free(u);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NGX_MAX_OFF_T_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (u != utf16) {
|
||||||
|
ngx_free(u);
|
||||||
|
}
|
||||||
|
|
||||||
return (off_t) navail.QuadPart;
|
return (off_t) navail.QuadPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue