const Exports& WindowsImage::GetExports(S2EExecutionState *s) { if (!m_ExportsInited) { InitExports(s); m_ExportsInited = true; } return m_Exports; }
bool Plugin::LoadData() { if (WorkFlags.Check(PIWF_DONTLOADAGAIN)) return false; if (WorkFlags.Check(PIWF_DATALOADED)) return true; if (m_Instance) return true; if (!m_Instance) { string strCurPlugDiskPath; wchar_t Drive[]={0,L' ',L':',0}; //ставим 0, как признак того, что вертать обратно ненадо! const auto strCurPath = os::GetCurrentDirectory(); if (ParsePath(m_strModuleName) == PATH_DRIVELETTER) // если указан локальный путь, то... { Drive[0] = L'='; Drive[1] = m_strModuleName.front(); os::env::get_variable(Drive, strCurPlugDiskPath); } PrepareModulePath(m_strModuleName); m_Instance = m_model->Create(m_strModuleName); FarChDir(strCurPath); if (Drive[0]) // вернем ее (переменную окружения) обратно os::env::set_variable(Drive, strCurPlugDiskPath); } if (!m_Instance) { //чтоб не пытаться загрузить опять а то ошибка будет постоянно показываться. WorkFlags.Set(PIWF_DONTLOADAGAIN); if (!Global->Opt->LoadPlug.SilentLoadPlugin) //убрать в PluginSet { Message(MSG_WARNING|MSG_ERRORTYPE|MSG_NOPLUGINS, MSG(MError), make_vector<string>(MSG(MPlgLoadPluginError), m_strModuleName), make_vector<string>(MSG(MOk)), L"ErrLoadPlugin"); } return false; } WorkFlags.Clear(PIWF_CACHED); if(bPendingRemove) { bPendingRemove = false; m_model->GetOwner()->UndoRemove(this); } InitExports(); GlobalInfo Info={sizeof(Info)}; if(GetGlobalInfo(&Info) && Info.StructSize && Info.Title && *Info.Title && Info.Description && *Info.Description && Info.Author && *Info.Author) { MinFarVersion = Info.MinFarVersion; PluginVersion = Info.Version; VersionString = VersionToString(PluginVersion); strTitle = Info.Title; strDescription = Info.Description; strAuthor = Info.Author; bool ok=true; if(m_Guid != FarGuid && m_Guid != Info.Guid) { ok = m_model->GetOwner()->UpdateId(this, Info.Guid); } else { SetGuid(Info.Guid); } if (ok) { WorkFlags.Set(PIWF_DATALOADED); return true; } } Unload(); //чтоб не пытаться загрузить опять а то ошибка будет постоянно показываться. WorkFlags.Set(PIWF_DONTLOADAGAIN); return false; }