GLRendererRoster::GLRendererRoster(BGLView *view, ulong options) : fNextID(0), fView(view), fOptions(options), fSafeMode(false) { char parameter[32]; size_t parameterLength = sizeof(parameter); #ifdef HAIKU_TARGET_PLATFORM_HAIKU if (_kern_get_safemode_option(B_SAFEMODE_SAFE_MODE, parameter, ¶meterLength) == B_OK) #else if (_kget_safemode_option_(B_SAFEMODE_SAFE_MODE, parameter, ¶meterLength) == B_OK) #endif { if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) fSafeMode = true; } #ifdef HAIKU_TARGET_PLATFORM_HAIKU if (_kern_get_safemode_option(B_SAFEMODE_DISABLE_USER_ADD_ONS, parameter, ¶meterLength) == B_OK) #else if (_kget_safemode_option_(B_SAFEMODE_DISABLE_USER_ADD_ONS, parameter, ¶meterLength) == B_OK) #endif { if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) fSafeMode = true; } AddDefaultPaths(); }
BTranslatorRoster::Private::Private() : BHandler("translator roster"), BLocker("translator list"), fABISubDirectory(NULL), fNextID(1), fLazyScanning(true), fSafeMode(false) { char parameter[32]; size_t parameterLength = sizeof(parameter); if (_kern_get_safemode_option(B_SAFEMODE_SAFE_MODE, parameter, ¶meterLength) == B_OK) { if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) fSafeMode = true; } if (_kern_get_safemode_option(B_SAFEMODE_DISABLE_USER_ADD_ONS, parameter, ¶meterLength) == B_OK) { if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) fSafeMode = true; } // We might run in compatibility mode on a system with a different ABI. The // translators matching our ABI can usually be found in respective // subdirectories of the translator directories. system_info info; if (get_system_info(&info) == B_OK && (info.abi & B_HAIKU_ABI_MAJOR) != (B_HAIKU_ABI & B_HAIKU_ABI_MAJOR)) { switch (B_HAIKU_ABI & B_HAIKU_ABI_MAJOR) { case B_HAIKU_ABI_GCC_2: fABISubDirectory = "gcc2"; break; case B_HAIKU_ABI_GCC_4: fABISubDirectory = "gcc4"; break; } } // we're sneaking us into the BApplication if (be_app != NULL && be_app->Lock()) { be_app->AddHandler(this); be_app->Unlock(); } }
GLRendererRoster::GLRendererRoster(BGLView* view, ulong options) : fNextID(0), fView(view), fOptions(options), fSafeMode(false), fABISubDirectory(NULL) { char parameter[32]; size_t parameterLength = sizeof(parameter); if (_kern_get_safemode_option(B_SAFEMODE_SAFE_MODE, parameter, ¶meterLength) == B_OK) { if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) fSafeMode = true; } if (_kern_get_safemode_option(B_SAFEMODE_DISABLE_USER_ADD_ONS, parameter, ¶meterLength) == B_OK) { if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) fSafeMode = true; } // We might run in compatibility mode on a system with a different ABI. The // renderers matching our ABI can usually be found in respective // subdirectories of the opengl add-ons directories. system_info info; if (get_system_info(&info) == B_OK && (info.abi & B_HAIKU_ABI_MAJOR) != (B_HAIKU_ABI & B_HAIKU_ABI_MAJOR)) { switch (B_HAIKU_ABI & B_HAIKU_ABI_MAJOR) { case B_HAIKU_ABI_GCC_2: fABISubDirectory = "gcc2"; break; case B_HAIKU_ABI_GCC_4: fABISubDirectory = "gcc4"; break; } } AddDefaultPaths(); }
void MediaAddonServer::ReadyToRun() { if (!be_roster->IsRunning("application/x-vnd.Be.media-server")) { // the media server is not running, let's quit fprintf(stderr, "The media_server is not running!\n"); Quit(); return; } // the control thread is already running at this point, // so we can talk to the media server and also receive // commands for instantiation ASSERT(fStartup == true); // The very first thing to do is to create the system time source, // register it with the server, and make it the default SYSTEM_TIME_SOURCE BMediaNode *timeSource = new SystemTimeSource; status_t result = fMediaRoster->RegisterNode(timeSource); if (result != B_OK) { fprintf(stderr, "Can't register system time source : %s\n", strerror(result)); debugger("Can't register system time source"); } if (timeSource->ID() != NODE_SYSTEM_TIMESOURCE_ID) debugger("System time source got wrong node ID"); media_node node = timeSource->Node(); result = MediaRosterEx(fMediaRoster)->SetNode(SYSTEM_TIME_SOURCE, &node); if (result != B_OK) debugger("Can't setup system time source as default"); // During startup, first all add-ons are loaded, then all // nodes (flavors) representing physical inputs and outputs // are instantiated. Next, all add-ons that need autostart // will be autostarted. Finally, add-ons that don't have // any active nodes (flavors) will be unloaded. char parameter[32]; size_t parameterLength = sizeof(parameter); bool safeMode = false; if (_kern_get_safemode_option(B_SAFEMODE_SAFE_MODE, parameter, ¶meterLength) == B_OK) { if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) safeMode = true; } fMonitorHandler = new MonitorHandler(this); AddHandler(fMonitorHandler); BMessage pulse(B_PULSE); fPulseRunner = new BMessageRunner(fMonitorHandler, &pulse, 1000000LL); // the monitor handler needs a pulse to check if add-ons are ready // load dormant media nodes const directory_which directories[] = { B_USER_ADDONS_DIRECTORY, B_COMMON_ADDONS_DIRECTORY, B_SYSTEM_ADDONS_DIRECTORY }; // when safemode, only B_SYSTEM_ADDONS_DIRECTORY is used for (uint32 i = safeMode ? 2 : 0; i < sizeof(directories) / sizeof(directory_which); i++) { BDirectory directory; node_ref nodeRef; BPath path; if (find_directory(directories[i], &path) == B_OK && path.Append("media") == B_OK && directory.SetTo(path.Path()) == B_OK && directory.GetNodeRef(&nodeRef) == B_OK) fMonitorHandler->AddDirectory(&nodeRef); } #ifdef USER_ADDON_PATH node_ref nodeRef; if (entry.SetTo(USER_ADDON_PATH) == B_OK && entry.GetNodeRef(&nodeRef) == B_OK) fMonitorHandler->AddDirectory(&nodeRef); #endif fStartup = false; InfoMap::iterator iterator = fInfoMap.begin(); for (; iterator != fInfoMap.end(); iterator++) _InstantiatePhysicalInputsAndOutputs(iterator->second); for (iterator = fInfoMap.begin(); iterator != fInfoMap.end(); iterator++) _InstantiateAutostartFlavors(iterator->second); for (iterator = fInfoMap.begin(); iterator != fInfoMap.end(); iterator++) _PutAddonIfPossible(iterator->second); server_rescan_defaults_command cmd; SendToServer(SERVER_RESCAN_DEFAULTS, &cmd, sizeof(cmd)); }
void AddOnManager::_RegisterAddOns() { class CodecHandler : public AddOnMonitorHandler { private: AddOnManager* fManager; public: CodecHandler(AddOnManager* manager) { fManager = manager; } virtual void AddOnCreated(const add_on_entry_info* entryInfo) { } virtual void AddOnEnabled(const add_on_entry_info* entryInfo) { entry_ref ref; make_entry_ref(entryInfo->dir_nref.device, entryInfo->dir_nref.node, entryInfo->name, &ref); fManager->_RegisterAddOn(ref); } virtual void AddOnDisabled(const add_on_entry_info* entryInfo) { entry_ref ref; make_entry_ref(entryInfo->dir_nref.device, entryInfo->dir_nref.node, entryInfo->name, &ref); fManager->_UnregisterAddOn(ref); } virtual void AddOnRemoved(const add_on_entry_info* entryInfo) { } }; fAddOnMonitorHandler = new CodecHandler(this); fAddOnMonitor = new AddOnMonitor(fAddOnMonitorHandler); // get safemode option for disabling user add-ons char buffer[16]; size_t size = sizeof(buffer); bool disableUserAddOns = _kern_get_safemode_option( B_SAFEMODE_DISABLE_USER_ADD_ONS, buffer, &size) == B_OK && (!strcasecmp(buffer, "true") || !strcasecmp(buffer, "yes") || !strcasecmp(buffer, "on") || !strcasecmp(buffer, "enabled") || !strcmp(buffer, "1")); node_ref nref; BDirectory directory; BPath path; for (uint i = 0; i < sizeof(sDirectories) / sizeof(directory_which); i++) { if (disableUserAddOns && i <= 1) continue; if (find_directory(sDirectories[i], &path) == B_OK && path.Append("media/plugins") == B_OK && directory.SetTo(path.Path()) == B_OK && directory.GetNodeRef(&nref) == B_OK) { fAddOnMonitorHandler->AddDirectory(&nref); // NOTE: This may already start registering add-ons in the // AddOnMonitor looper thread after the call returns! } } }