From 4f8618bd2354594dd55fba8370b6785574369b44 Mon Sep 17 00:00:00 2001 From: nakst <> Date: Fri, 17 Sep 2021 17:16:33 +0100 Subject: [PATCH] fix POSIX subsystem --- desktop/api.cpp | 41 +++++++++++++++++++++++------------------ desktop/posix.cpp | 1 + 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/desktop/api.cpp b/desktop/api.cpp index 35b7f5e..9baf579 100644 --- a/desktop/api.cpp +++ b/desktop/api.cpp @@ -1320,28 +1320,33 @@ extern "C" void _start(EsProcessStartupInformation *_startupInformation) { SettingsWindowColorUpdated(); } else { EsHandle initialMountPointsBuffer = api.startupInformation->data.initialMountPoints; - size_t initialMountPointCount = EsConstantBufferGetSize(initialMountPointsBuffer) / sizeof(EsMountPoint); - EsMountPoint *initialMountPoints = (EsMountPoint *) EsHeapAllocate(initialMountPointCount * sizeof(EsMountPoint), false); - EsConstantBufferRead(initialMountPointsBuffer, initialMountPoints); - - for (uintptr_t i = 0; i < initialMountPointCount; i++) { - NodeAddMountPoint(initialMountPoints[i].prefix, initialMountPoints[i].prefixBytes, initialMountPoints[i].base, true); - } - - EsHeapFree(initialMountPoints); - EsHandleClose(initialMountPointsBuffer); - EsHandle initialDevicesBuffer = api.startupInformation->data.initialDevices; - size_t initialDevicesCount = EsConstantBufferGetSize(initialDevicesBuffer) / sizeof(EsMessageDevice); - EsMessageDevice *initialDevices = (EsMessageDevice *) EsHeapAllocate(initialDevicesCount * sizeof(EsMessageDevice), false); - EsConstantBufferRead(initialDevicesBuffer, initialDevices); - for (uintptr_t i = 0; i < initialDevicesCount; i++) { - api.connectedDevices.Add(initialDevices[i]); + if (initialMountPointsBuffer) { + size_t initialMountPointCount = EsConstantBufferGetSize(initialMountPointsBuffer) / sizeof(EsMountPoint); + EsMountPoint *initialMountPoints = (EsMountPoint *) EsHeapAllocate(initialMountPointCount * sizeof(EsMountPoint), false); + EsConstantBufferRead(initialMountPointsBuffer, initialMountPoints); + + for (uintptr_t i = 0; i < initialMountPointCount; i++) { + NodeAddMountPoint(initialMountPoints[i].prefix, initialMountPoints[i].prefixBytes, initialMountPoints[i].base, true); + } + + EsHeapFree(initialMountPoints); + EsHandleClose(initialMountPointsBuffer); } - EsHeapFree(initialDevices); - EsHandleClose(initialDevicesBuffer); + if (initialDevicesBuffer) { + size_t initialDevicesCount = EsConstantBufferGetSize(initialDevicesBuffer) / sizeof(EsMessageDevice); + EsMessageDevice *initialDevices = (EsMessageDevice *) EsHeapAllocate(initialDevicesCount * sizeof(EsMessageDevice), false); + EsConstantBufferRead(initialDevicesBuffer, initialDevices); + + for (uintptr_t i = 0; i < initialDevicesCount; i++) { + api.connectedDevices.Add(initialDevices[i]); + } + + EsHeapFree(initialDevices); + EsHandleClose(initialDevicesBuffer); + } uint8_t m = DESKTOP_MSG_SYSTEM_CONFIGURATION_GET; EsBuffer responseBuffer = { .canGrow = true }; diff --git a/desktop/posix.cpp b/desktop/posix.cpp index d4be62a..a283a8f 100644 --- a/desktop/posix.cpp +++ b/desktop/posix.cpp @@ -339,6 +339,7 @@ long EsPOSIXSystemCall(long n, long a1, long a2, long a3, long a4, long a5, long char *_path = EsPOSIXConvertPath((const char *) a1, &pathBytes, false); char *path = (char *) __builtin_alloca(pathBytes); EsMemoryCopy(path, _path, pathBytes); + EsHeapFree(_path); char **argv = (char **) a2; char **envp = (char **) a3;