IExtension *CExtensionManager::LoadAutoExtension(const char *path)
{
	/* Remove platform extension if it's there. Compat hack. */
	const char *ext = libsys->GetFileExtension(path);
	if (strcmp(ext, PLATFORM_LIB_EXT) == 0)
	{
		char path2[PLATFORM_MAX_PATH];
		smcore.Format(path2, sizeof(path2), "%s", path);
		path2[strlen(path) - strlen(PLATFORM_LIB_EXT) - 1] = '\0';
		return LoadAutoExtension(path2);
	}

	IExtension *pAlready;
	if ((pAlready=FindExtensionByFile(path)) != NULL)
	{
		return pAlready;
	}

	char error[256];
	CExtension *p = new CLocalExtension(path);

	/* We put us in the list beforehand so extensions that check for each other
	 * won't recursively load each other.
	 */
	m_Libs.push_back(p);

	if (!p->Load(error, sizeof(error)) || !p->IsLoaded())
	{
		smcore.LogError("[SM] Unable to load extension \"%s\": %s", path, error);
		p->SetError(error);
	}

	return p;
}
Exemple #2
0
IExtension *CExtensionManager::LoadAutoExtension(const char *path)
{
    if (!strstr(path, "." PLATFORM_LIB_EXT))
    {
        char newpath[PLATFORM_MAX_PATH];
        g_LibSys.PathFormat(newpath, sizeof(newpath), "%s.%s", path, PLATFORM_LIB_EXT);
        return LoadAutoExtension(newpath);
    }

    IExtension *pAlready;
    if ((pAlready=FindExtensionByFile(path)) != NULL)
    {
        return pAlready;
    }

    char error[256];
    CExtension *p = new CLocalExtension(path);

    /* We put us in the list beforehand so extensions that check for each other
     * won't recursively load each other.
     */
    m_Libs.push_back(p);

    if (!p->Load(error, sizeof(error)) || !p->IsLoaded())
    {
        g_Logger.LogError("[SM] Unable to load extension \"%s\": %s", path, error);
        p->SetError(error);
    }

    return p;
}