| @@ -955,7 +955,7 @@ | |||||
| <item row="1" column="0" colspan="3"> | <item row="1" column="0" colspan="3"> | ||||
| <widget class="QCheckBox" name="ch_engine_uis_always_on_top"> | <widget class="QCheckBox" name="ch_engine_uis_always_on_top"> | ||||
| <property name="text"> | <property name="text"> | ||||
| <string>Make UIs always-on-top</string> | |||||
| <string>Make plugin UIs always-on-top</string> | |||||
| </property> | </property> | ||||
| </widget> | </widget> | ||||
| </item> | </item> | ||||
| @@ -1482,20 +1482,20 @@ | |||||
| </layout> | </layout> | ||||
| </item> | </item> | ||||
| <item> | <item> | ||||
| <widget class="QGroupBox" name="group_advanced_main"> | |||||
| <widget class="QGroupBox" name="group_experimental_main"> | |||||
| <property name="title"> | <property name="title"> | ||||
| <string>Main</string> | <string>Main</string> | ||||
| </property> | </property> | ||||
| <layout class="QVBoxLayout" name="verticalLayout_17"> | <layout class="QVBoxLayout" name="verticalLayout_17"> | ||||
| <item> | <item> | ||||
| <widget class="QCheckBox" name="cb_advanced_plugin_bridges"> | |||||
| <widget class="QCheckBox" name="cb_exp_plugin_bridges"> | |||||
| <property name="text"> | <property name="text"> | ||||
| <string>Enable plugin bridges</string> | <string>Enable plugin bridges</string> | ||||
| </property> | </property> | ||||
| </widget> | </widget> | ||||
| </item> | </item> | ||||
| <item> | <item> | ||||
| <widget class="QCheckBox" name="ch_advanced_load_lib_global"> | |||||
| <widget class="QCheckBox" name="ch_exp_load_lib_global"> | |||||
| <property name="text"> | <property name="text"> | ||||
| <string>Load Carla backend in global namespace (NOT RECOMMENDED)</string> | <string>Load Carla backend in global namespace (NOT RECOMMENDED)</string> | ||||
| </property> | </property> | ||||
| @@ -1505,7 +1505,7 @@ | |||||
| </widget> | </widget> | ||||
| </item> | </item> | ||||
| <item> | <item> | ||||
| <widget class="QGroupBox" name="group_advanced_canvas"> | |||||
| <widget class="QGroupBox" name="group_experimental_canvas"> | |||||
| <property name="title"> | <property name="title"> | ||||
| <string>Canvas</string> | <string>Canvas</string> | ||||
| </property> | </property> | ||||
| @@ -1538,7 +1538,7 @@ | |||||
| </widget> | </widget> | ||||
| </item> | </item> | ||||
| <item> | <item> | ||||
| <widget class="QGroupBox" name="group_avanced_engine"> | |||||
| <widget class="QGroupBox" name="group_experimental_engine"> | |||||
| <property name="title"> | <property name="title"> | ||||
| <string>Engine</string> | <string>Engine</string> | ||||
| </property> | </property> | ||||
| @@ -1554,6 +1554,13 @@ This mode is not available for VST plugins.</string> | |||||
| </property> | </property> | ||||
| </widget> | </widget> | ||||
| </item> | </item> | ||||
| <item> | |||||
| <widget class="QCheckBox" name="ch_exp_prevent_bad_behaviour"> | |||||
| <property name="text"> | |||||
| <string>Prevent plugins from doing bad stuff (needs restart)</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | <item> | ||||
| <widget class="QCheckBox" name="ch_engine_prefer_plugin_bridges"> | <widget class="QCheckBox" name="ch_engine_prefer_plugin_bridges"> | ||||
| <property name="toolTip"> | <property name="toolTip"> | ||||
| @@ -1587,7 +1587,7 @@ void CarlaEngine::setOption(const EngineOption option, const int value, const ch | |||||
| #ifdef CARLA_OS_LINUX | #ifdef CARLA_OS_LINUX | ||||
| if (value != 0) | if (value != 0) | ||||
| { | { | ||||
| CarlaString interposerPath(CarlaString(pData->options.binaryDir) + CARLA_OS_SEP_STR "libcarla_interposer.so"); | |||||
| CarlaString interposerPath(CarlaString(pData->options.binaryDir) + "/libcarla_interposer-safe.so"); | |||||
| ::setenv("LD_PRELOAD", interposerPath.buffer(), 1); | ::setenv("LD_PRELOAD", interposerPath.buffer(), 1); | ||||
| } | } | ||||
| else | else | ||||
| @@ -26,6 +26,7 @@ | |||||
| #include "CarlaBridgeUtils.hpp" | #include "CarlaBridgeUtils.hpp" | ||||
| #include "CarlaEngineUtils.hpp" | #include "CarlaEngineUtils.hpp" | ||||
| #include "CarlaMathUtils.hpp" | #include "CarlaMathUtils.hpp" | ||||
| #include "CarlaPipeUtils.hpp" | |||||
| #include "CarlaShmUtils.hpp" | #include "CarlaShmUtils.hpp" | ||||
| #include "CarlaThread.hpp" | #include "CarlaThread.hpp" | ||||
| @@ -156,10 +157,8 @@ protected: | |||||
| const ScopedEngineEnvironmentLocker _seel(kEngine); | const ScopedEngineEnvironmentLocker _seel(kEngine); | ||||
| #ifdef CARLA_OS_LINUX | #ifdef CARLA_OS_LINUX | ||||
| const char* const oldPreload(std::getenv("LD_PRELOAD")); | |||||
| if (oldPreload != nullptr) | |||||
| ::unsetenv("LD_PRELOAD"); | |||||
| const ScopedEnvVar sev1("LD_LIBRARY_PATH", nullptr); | |||||
| const ScopedEnvVar sev2("LD_PRELOAD", nullptr); | |||||
| #endif | #endif | ||||
| carla_setenv("ENGINE_OPTION_FORCE_STEREO", bool2str(options.forceStereo)); | carla_setenv("ENGINE_OPTION_FORCE_STEREO", bool2str(options.forceStereo)); | ||||
| @@ -235,11 +234,6 @@ protected: | |||||
| fBinary.toRawUTF8(), getPluginTypeAsString(kPlugin->getType()), filename.toRawUTF8(), fLabel.toRawUTF8(), kPlugin->getUniqueId()); | fBinary.toRawUTF8(), getPluginTypeAsString(kPlugin->getType()), filename.toRawUTF8(), fLabel.toRawUTF8(), kPlugin->getUniqueId()); | ||||
| started = fProcess->start(arguments); | started = fProcess->start(arguments); | ||||
| #ifdef CARLA_OS_LINUX | |||||
| if (oldPreload != nullptr) | |||||
| ::setenv("LD_PRELOAD", oldPreload, 1); | |||||
| #endif | |||||
| } | } | ||||
| if (! started) | if (! started) | ||||
| @@ -1233,9 +1233,9 @@ class CarlaHostMeta(object): | |||||
| # settings | # settings | ||||
| self.experimental = False | self.experimental = False | ||||
| self.forceStereo = False | |||||
| self.manageUIs = False | self.manageUIs = False | ||||
| self.maxParameters = 0 | self.maxParameters = 0 | ||||
| self.forceStereo = False | |||||
| self.preferPluginBridges = False | self.preferPluginBridges = False | ||||
| self.preferUIBridges = False | self.preferUIBridges = False | ||||
| self.preventBadBehaviour = False | self.preventBadBehaviour = False | ||||
| @@ -1044,9 +1044,9 @@ class PluginRefreshW(QDialog): | |||||
| self.loadSettings() | self.loadSettings() | ||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Disable bridges (experimental for now) | |||||
| # Hide bridges if disabled | |||||
| if not host.experimental: | |||||
| if not host.showPluginBridges: | |||||
| self.ui.ch_native.setChecked(True) | self.ui.ch_native.setChecked(True) | ||||
| self.ui.ch_native.setEnabled(False) | self.ui.ch_native.setEnabled(False) | ||||
| self.ui.ch_native.setVisible(False) | self.ui.ch_native.setVisible(False) | ||||
| @@ -2586,16 +2586,14 @@ def setHostSettings(host): | |||||
| # kdevelop likes this :) | # kdevelop likes this :) | ||||
| if False: host = CarlaHostNull() | if False: host = CarlaHostNull() | ||||
| # TEST | |||||
| #host.preventBadBehaviour = True | |||||
| host.set_engine_option(ENGINE_OPTION_FORCE_STEREO, host.forceStereo, "") | host.set_engine_option(ENGINE_OPTION_FORCE_STEREO, host.forceStereo, "") | ||||
| host.set_engine_option(ENGINE_OPTION_MAX_PARAMETERS, host.maxParameters, "") | |||||
| host.set_engine_option(ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, host.preferPluginBridges, "") | host.set_engine_option(ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, host.preferPluginBridges, "") | ||||
| host.set_engine_option(ENGINE_OPTION_PREFER_UI_BRIDGES, host.preferUIBridges, "") | host.set_engine_option(ENGINE_OPTION_PREFER_UI_BRIDGES, host.preferUIBridges, "") | ||||
| host.set_engine_option(ENGINE_OPTION_UIS_ALWAYS_ON_TOP, host.uisAlwaysOnTop, "") | |||||
| host.set_engine_option(ENGINE_OPTION_MAX_PARAMETERS, host.maxParameters, "") | |||||
| host.set_engine_option(ENGINE_OPTION_UI_BRIDGES_TIMEOUT, host.uiBridgesTimeout, "") | |||||
| host.set_engine_option(ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, host.preventBadBehaviour, "") | host.set_engine_option(ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, host.preventBadBehaviour, "") | ||||
| host.set_engine_option(ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT, host.showLogs, "") | host.set_engine_option(ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT, host.showLogs, "") | ||||
| host.set_engine_option(ENGINE_OPTION_UI_BRIDGES_TIMEOUT, host.uiBridgesTimeout, "") | |||||
| host.set_engine_option(ENGINE_OPTION_UIS_ALWAYS_ON_TOP, host.uisAlwaysOnTop, "") | |||||
| if host.isPlugin: | if host.isPlugin: | ||||
| return | return | ||||
| @@ -274,7 +274,7 @@ class CarlaSettingsW(QDialog): | |||||
| self.ui.ch_engine_force_stereo.setEnabled(False) | self.ui.ch_engine_force_stereo.setEnabled(False) | ||||
| if host.isControl or host.isPlugin: | if host.isControl or host.isPlugin: | ||||
| self.ui.ch_advanced_load_lib_global.hide() | |||||
| self.ui.ch_exp_load_lib_global.hide() | |||||
| # FIXME, pipes on win32 not working | # FIXME, pipes on win32 not working | ||||
| if WINDOWS: | if WINDOWS: | ||||
| @@ -471,13 +471,17 @@ class CarlaSettingsW(QDialog): | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Experimental | # Experimental | ||||
| self.ui.cb_advanced_plugin_bridges.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, | |||||
| CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES, | |||||
| type=bool)) | |||||
| self.ui.cb_exp_plugin_bridges.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, | |||||
| CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES, | |||||
| type=bool)) | |||||
| self.ui.ch_advanced_load_lib_global.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, | |||||
| CARLA_DEFAULT_EXPERIMENTAL_LOAD_LIB_GLOBAL, | |||||
| type=bool)) | |||||
| self.ui.ch_exp_load_lib_global.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, | |||||
| CARLA_DEFAULT_EXPERIMENTAL_LOAD_LIB_GLOBAL, | |||||
| type=bool)) | |||||
| self.ui.ch_exp_prevent_bad_behaviour.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, | |||||
| CARLA_DEFAULT_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, | |||||
| type=bool)) | |||||
| # -------------------------------------------------------------------------------------------------------- | # -------------------------------------------------------------------------------------------------------- | ||||
| @@ -493,18 +497,12 @@ class CarlaSettingsW(QDialog): | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Main | # Main | ||||
| self.host.showLogs = self.ui.ch_main_show_logs.isChecked() | |||||
| self.host.uisAlwaysOnTop = self.ui.ch_engine_uis_always_on_top.isChecked() | |||||
| settings.setValue(CARLA_KEY_MAIN_PROJECT_FOLDER, self.ui.le_main_proj_folder.text()) | settings.setValue(CARLA_KEY_MAIN_PROJECT_FOLDER, self.ui.le_main_proj_folder.text()) | ||||
| settings.setValue(CARLA_KEY_MAIN_USE_PRO_THEME, self.ui.ch_main_theme_pro.isChecked()) | settings.setValue(CARLA_KEY_MAIN_USE_PRO_THEME, self.ui.ch_main_theme_pro.isChecked()) | ||||
| settings.setValue(CARLA_KEY_MAIN_PRO_THEME_COLOR, self.ui.cb_main_theme_color.currentText()) | settings.setValue(CARLA_KEY_MAIN_PRO_THEME_COLOR, self.ui.cb_main_theme_color.currentText()) | ||||
| settings.setValue(CARLA_KEY_MAIN_REFRESH_INTERVAL, self.ui.sb_main_refresh_interval.value()) | settings.setValue(CARLA_KEY_MAIN_REFRESH_INTERVAL, self.ui.sb_main_refresh_interval.value()) | ||||
| settings.setValue(CARLA_KEY_MAIN_USE_CUSTOM_SKINS, self.ui.ch_main_use_custom_skins.isChecked()) | settings.setValue(CARLA_KEY_MAIN_USE_CUSTOM_SKINS, self.ui.ch_main_use_custom_skins.isChecked()) | ||||
| settings.setValue(CARLA_KEY_MAIN_SHOW_LOGS, self.host.showLogs) | |||||
| settings.setValue(CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP, self.host.uisAlwaysOnTop) | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Canvas | # Canvas | ||||
| @@ -545,29 +543,33 @@ class CarlaSettingsW(QDialog): | |||||
| settings.setValue(CARLA_KEY_ENGINE_PROCESS_MODE, self.host.nextProcessMode) | settings.setValue(CARLA_KEY_ENGINE_PROCESS_MODE, self.host.nextProcessMode) | ||||
| self.host.forceStereo = self.ui.ch_engine_force_stereo.isChecked() | self.host.forceStereo = self.ui.ch_engine_force_stereo.isChecked() | ||||
| self.host.maxParameters = self.ui.sb_engine_max_params.value() | |||||
| self.host.manageUIs = self.ui.ch_engine_manage_uis.isChecked() | |||||
| self.host.preferPluginBridges = self.ui.ch_engine_prefer_plugin_bridges.isChecked() | self.host.preferPluginBridges = self.ui.ch_engine_prefer_plugin_bridges.isChecked() | ||||
| self.host.preferUIBridges = self.ui.ch_engine_prefer_ui_bridges.isChecked() | self.host.preferUIBridges = self.ui.ch_engine_prefer_ui_bridges.isChecked() | ||||
| self.host.maxParameters = self.ui.sb_engine_max_params.value() | |||||
| self.host.showLogs = self.ui.ch_main_show_logs.isChecked() | |||||
| self.host.uiBridgesTimeout = self.ui.sb_engine_ui_bridges_timeout.value() | self.host.uiBridgesTimeout = self.ui.sb_engine_ui_bridges_timeout.value() | ||||
| self.host.manageUIs = self.ui.ch_engine_manage_uis.isChecked() | |||||
| self.host.uisAlwaysOnTop = self.ui.ch_engine_uis_always_on_top.isChecked() | |||||
| if self.ui.ch_engine_force_stereo.isEnabled(): | if self.ui.ch_engine_force_stereo.isEnabled(): | ||||
| self.host.set_engine_option(ENGINE_OPTION_FORCE_STEREO, self.host.forceStereo, "") | self.host.set_engine_option(ENGINE_OPTION_FORCE_STEREO, self.host.forceStereo, "") | ||||
| self.host.set_engine_option(ENGINE_OPTION_MAX_PARAMETERS, self.host.maxParameters, "") | |||||
| self.host.set_engine_option(ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, self.host.preferPluginBridges, "") | self.host.set_engine_option(ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, self.host.preferPluginBridges, "") | ||||
| self.host.set_engine_option(ENGINE_OPTION_PREFER_UI_BRIDGES, self.host.preferUIBridges, "") | self.host.set_engine_option(ENGINE_OPTION_PREFER_UI_BRIDGES, self.host.preferUIBridges, "") | ||||
| self.host.set_engine_option(ENGINE_OPTION_UIS_ALWAYS_ON_TOP, self.host.uisAlwaysOnTop, "") | |||||
| self.host.set_engine_option(ENGINE_OPTION_MAX_PARAMETERS, self.host.maxParameters, "") | |||||
| self.host.set_engine_option(ENGINE_OPTION_UI_BRIDGES_TIMEOUT, self.host.uiBridgesTimeout, "") | self.host.set_engine_option(ENGINE_OPTION_UI_BRIDGES_TIMEOUT, self.host.uiBridgesTimeout, "") | ||||
| self.host.set_engine_option(ENGINE_OPTION_UIS_ALWAYS_ON_TOP, self.host.uisAlwaysOnTop, "") | |||||
| if self.ui.ch_engine_force_stereo.isEnabled(): | if self.ui.ch_engine_force_stereo.isEnabled(): | ||||
| settings.setValue(CARLA_KEY_ENGINE_FORCE_STEREO, self.host.forceStereo) | settings.setValue(CARLA_KEY_ENGINE_FORCE_STEREO, self.host.forceStereo) | ||||
| settings.setValue(CARLA_KEY_MAIN_SHOW_LOGS, self.host.showLogs) | |||||
| settings.setValue(CARLA_KEY_ENGINE_MAX_PARAMETERS, self.host.maxParameters) | |||||
| settings.setValue(CARLA_KEY_ENGINE_MANAGE_UIS, self.host.manageUIs) | |||||
| settings.setValue(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, self.host.preferPluginBridges) | settings.setValue(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, self.host.preferPluginBridges) | ||||
| settings.setValue(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, self.host.preferUIBridges) | settings.setValue(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, self.host.preferUIBridges) | ||||
| settings.setValue(CARLA_KEY_ENGINE_MAX_PARAMETERS, self.host.maxParameters) | |||||
| settings.setValue(CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT, self.host.uiBridgesTimeout) | settings.setValue(CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT, self.host.uiBridgesTimeout) | ||||
| settings.setValue(CARLA_KEY_ENGINE_MANAGE_UIS, self.host.manageUIs) | |||||
| settings.setValue(CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP, self.host.uisAlwaysOnTop) | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Paths | # Paths | ||||
| @@ -626,8 +628,9 @@ class CarlaSettingsW(QDialog): | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Experimental | # Experimental | ||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, self.ui.cb_advanced_plugin_bridges.isChecked()) | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, self.ui.ch_advanced_load_lib_global.isChecked()) | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, self.ui.cb_exp_plugin_bridges.isChecked()) | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, self.ui.ch_exp_load_lib_global.isChecked()) | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, self.ui.ch_exp_prevent_bad_behaviour.isChecked()) | |||||
| # -------------------------------------------------------------------------------------------------------- | # -------------------------------------------------------------------------------------------------------- | ||||
| @@ -763,8 +766,9 @@ class CarlaSettingsW(QDialog): | |||||
| def resetExperimentalSettings(self): | def resetExperimentalSettings(self): | ||||
| # Forever experimental | # Forever experimental | ||||
| self.ui.cb_advanced_plugin_bridges.setChecked(CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES) | |||||
| self.ui.ch_advanced_load_lib_global.setChecked(CARLA_DEFAULT_EXPERIMENTAL_LOAD_LIB_GLOBAL) | |||||
| self.ui.cb_exp_plugin_bridges.setChecked(CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES) | |||||
| self.ui.ch_exp_load_lib_global.setChecked(CARLA_DEFAULT_EXPERIMENTAL_LOAD_LIB_GLOBAL) | |||||
| self.ui.ch_exp_prevent_bad_behaviour.setChecked(CARLA_DEFAULT_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR) | |||||
| # Temporary, until stable | # Temporary, until stable | ||||
| self.ui.cb_canvas_fancy_eyecandy.setChecked(CARLA_DEFAULT_CANVAS_FANCY_EYE_CANDY) | self.ui.cb_canvas_fancy_eyecandy.setChecked(CARLA_DEFAULT_CANVAS_FANCY_EYE_CANDY) | ||||
| @@ -22,13 +22,15 @@ | |||||
| #include <sched.h> | #include <sched.h> | ||||
| #include <spawn.h> | #include <spawn.h> | ||||
| #define PREVENTED_FUNC_MSG carla_stderr2("Carla prevented a plugin from calling '%s', bad plugin!", __FUNCTION__) | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| // Our custom functions | // Our custom functions | ||||
| CARLA_EXPORT | CARLA_EXPORT | ||||
| pid_t fork() | pid_t fork() | ||||
| { | { | ||||
| carla_stdout("------------------------------- fork called"); | |||||
| PREVENTED_FUNC_MSG; | |||||
| errno = ENOSYS; | errno = ENOSYS; | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -36,7 +38,7 @@ pid_t fork() | |||||
| CARLA_EXPORT | CARLA_EXPORT | ||||
| int clone(int (*)(void*), void*, int, void*, ...) | int clone(int (*)(void*), void*, int, void*, ...) | ||||
| { | { | ||||
| carla_stdout("------------------------------- clone called"); | |||||
| PREVENTED_FUNC_MSG; | |||||
| errno = ENOSYS; | errno = ENOSYS; | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -44,15 +46,37 @@ int clone(int (*)(void*), void*, int, void*, ...) | |||||
| CARLA_EXPORT | CARLA_EXPORT | ||||
| int posix_spawn(pid_t*, const char*, const posix_spawn_file_actions_t*, const posix_spawnattr_t*, char* const[], char* const[]) | int posix_spawn(pid_t*, const char*, const posix_spawn_file_actions_t*, const posix_spawnattr_t*, char* const[], char* const[]) | ||||
| { | { | ||||
| carla_stdout("------------------------------- posix_spawn called"); | |||||
| PREVENTED_FUNC_MSG; | |||||
| return ENOSYS; | return ENOSYS; | ||||
| } | } | ||||
| CARLA_EXPORT | CARLA_EXPORT | ||||
| int posix_spawnp(pid_t*, const char*, const posix_spawn_file_actions_t*, const posix_spawnattr_t*, char* const[], char* const[]) | int posix_spawnp(pid_t*, const char*, const posix_spawn_file_actions_t*, const posix_spawnattr_t*, char* const[], char* const[]) | ||||
| { | { | ||||
| carla_stdout("------------------------------- posix_spawnp called"); | |||||
| PREVENTED_FUNC_MSG; | |||||
| return ENOSYS; | return ENOSYS; | ||||
| } | } | ||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| CARLA_EXPORT | |||||
| void gtk_init(int*, char***) | |||||
| { | |||||
| PREVENTED_FUNC_MSG; | |||||
| } | |||||
| CARLA_EXPORT | |||||
| int gtk_init_check(int*, char***) | |||||
| { | |||||
| PREVENTED_FUNC_MSG; | |||||
| return 0; | |||||
| } | |||||
| CARLA_EXPORT | |||||
| int gtk_init_with_args(int*, char***, const char*, void*, const char*, void**) | |||||
| { | |||||
| PREVENTED_FUNC_MSG; | |||||
| return 0; | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| @@ -197,7 +197,8 @@ bool waitForClientConnect(const HANDLE pipe, const uint32_t timeOutMilliseconds) | |||||
| static inline | static inline | ||||
| bool startProcess(const char* const argv[], pid_t& pidinst) noexcept | bool startProcess(const char* const argv[], pid_t& pidinst) noexcept | ||||
| { | { | ||||
| const ScopedEnvVar sev("LD_LIBRARY_PATH", nullptr); | |||||
| const ScopedEnvVar sev1("LD_LIBRARY_PATH", nullptr); | |||||
| const ScopedEnvVar sev2("LD_PRELOAD", nullptr); | |||||
| const pid_t ret = pidinst = vfork(); | const pid_t ret = pidinst = vfork(); | ||||