mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-22 11:13:21 +00:00
Fixed readdirSync to support junctions on Windows
This commit is contained in:
@@ -670,6 +670,26 @@ duk_ret_t ILibDuktape_fs_readdirSync(duk_context *ctx)
|
|||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
h = FindFirstFileW((LPCWSTR)path, &data);
|
h = FindFirstFileW((LPCWSTR)path, &data);
|
||||||
|
if (h == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
// Check if this was a Junction (Symbolic Link)
|
||||||
|
if (((wchar_t*)path)[pathLen - 2] == '*')
|
||||||
|
{
|
||||||
|
((wchar_t*)path)[pathLen - 2] = 0;
|
||||||
|
((wchar_t*)path)[pathLen - 3] = 0;
|
||||||
|
HANDLE tmp = CreateFileW((LPCWSTR)path, 0, 0, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
|
||||||
|
if (tmp != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
DWORD tmpSZlen = 3+GetFinalPathNameByHandleW(tmp, NULL, 0, 0);
|
||||||
|
wchar_t *tmpSZ = (wchar_t*)ILibMemory_AllocateTemp(Duktape_GetChain(ctx), tmpSZlen * 2);
|
||||||
|
tmpSZlen = GetFinalPathNameByHandleW(tmp, tmpSZ, tmpSZlen, 0);
|
||||||
|
wcscpy_s(tmpSZ + tmpSZlen, 3, L"\\*");
|
||||||
|
CloseHandle(tmp);
|
||||||
|
h = FindFirstFileW((LPCWSTR)tmpSZ+4, &data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
if (h != INVALID_HANDLE_VALUE)
|
if (h != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
if (wcscmp(data.cFileName, L".") != 0)
|
if (wcscmp(data.cFileName, L".") != 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user