示例#1
0
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;
}
示例#2
0
	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());
			}
		}
	}
示例#3
0
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;
}
示例#4
0
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);
}