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; }
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; }