static cell_t GetExtensionFileStatus(IPluginContext *pContext, const cell_t *params) { char *str; pContext->LocalToString(params[1], &str); IExtension *pExtension = extsys->FindExtensionByFile(str); if (!pExtension) { return -2; } if (!pExtension->IsLoaded()) { return -1; } char *error; pContext->LocalToString(params[2], &error); if (!pExtension->IsRunning(error, params[3])) { return 0; } return 1; }
void CCore::StartExecution_actual(int argc, char *argv[]) { IPluginShadow *pMyShadow = gEnv->PluginManager->FindPluginShadow("core"); IExtensionPoint *pStartListeners = pMyShadow->FindExtensionPoint("startlisteners"); size_t nextensions = pStartListeners->getExtensionCount(); for(size_t i = 0; i != nextensions; ++i) { IExtension *pEx = pStartListeners->getExtension(i); LogTrace("[Startup] Notifying start listener: %s", pEx->Extender()->PluginName().c_str()); Module::com_ptr<IStartListener> l; pEx->Extender()->CreateInstance(pEx->ImplClassID(), UUID_PPV(IStartListener, l.wrapped())); if(l) { l->OnStart(argc, argv); } else { LogErrorAlways("[Startup] Failed to create start listener's implementation: %s", pEx->Extender()->PluginName().c_str()); } } }
IDBDriver *DBManager::FindOrLoadDriver(const char *name) { size_t last_size = m_drivers.size(); for (size_t i=0; i<last_size; i++) { if (strcmp(m_drivers[i]->GetIdentifier(), name) == 0) { return m_drivers[i]; } } char filename[PLATFORM_MAX_PATH]; g_pSM->Format(filename, sizeof(filename), "dbi.%s.ext", name); IExtension *pExt = g_Extensions.LoadAutoExtension(filename); if (!pExt || !pExt->IsLoaded() || m_drivers.size() <= last_size) { return NULL; } /* last_size is now gauranteed to be a valid index. * The identifier must match the name. */ if (strcmp(m_drivers[last_size]->GetIdentifier(), name) == 0) { return m_drivers[last_size]; } return NULL; }
void HandleSystem::Dump(HANDLE_REPORTER rep) { unsigned int total_size = 0; rep("%-10.10s\t%-20.20s\t%-20.20s\t%-10.10s", "Handle", "Owner", "Type", "Memory"); rep("--------------------------------------------------------------------------"); for (unsigned int i = 1; i <= m_HandleTail; i++) { if (m_Handles[i].set != HandleSet_Used) { continue; } /* Get the index */ unsigned int index = (m_Handles[i].serial << 16) | i; /* Determine the owner */ const char *owner = "UNKNOWN"; if (m_Handles[i].owner) { IdentityToken_t *pOwner = m_Handles[i].owner; if (pOwner == g_pCoreIdent) { owner = "CORE"; } else if (pOwner == scripts->GetIdentity()) { owner = "PLUGINSYS"; } else { IExtension *ext = g_Extensions.GetExtensionFromIdent(pOwner); if (ext) { owner = ext->GetFilename(); } else { SMPlugin *pPlugin = scripts->FindPluginByIdentity(pOwner); if (pPlugin) { owner = pPlugin->GetFilename(); } } } } else { owner = "NONE"; } const char *type = "ANON"; QHandleType *pType = &m_Types[m_Handles[i].type]; unsigned int size = 0; unsigned int parentIdx; bool bresult; if (pType->name) type = pType->name->chars(); if ((parentIdx = m_Handles[i].clone) != 0) { if (m_Handles[parentIdx].refcount > 0) { size = 0; bresult = true; } else { bresult = pType->dispatch->GetHandleApproxSize(m_Handles[parentIdx].type, m_Handles[parentIdx].object, &size); } } else { bresult = pType->dispatch->GetHandleApproxSize(m_Handles[i].type, m_Handles[i].object, &size); } if (pType->dispatch->GetDispatchVersion() < HANDLESYS_MEMUSAGE_MIN_VERSION || !bresult) { rep("0x%08x\t%-20.20s\t%-20.20s\t%-10.10s", index, owner, type, "-1"); } else { char buffer[32]; smcore.Format(buffer, sizeof(buffer), "%d", size); rep("0x%08x\t%-20.20s\t%-20.20s\t%-10.10s", index, owner, type, buffer); total_size += size; } } rep("-- Approximately %d bytes of memory are in use by Handles.\n", total_size); }