Installers with plugins now load faster too
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1112 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
654102c28c
commit
1d98414847
4 changed files with 15 additions and 59 deletions
|
@ -141,32 +141,4 @@ char* Plugins::GetPluginDll(char* command)
|
|||
return m_commands.find(command);
|
||||
}
|
||||
|
||||
void Plugins::StoreInstDLL(char* dllName)
|
||||
{
|
||||
for (int i = 0; i < m_installDLLs.size(); i++)
|
||||
if (!strcmp(m_installDLLs[i], dllName))
|
||||
return;
|
||||
m_installDLLs.push_back(strdup(dllName));
|
||||
}
|
||||
|
||||
void Plugins::StoreUninstDLL(char* dllName)
|
||||
{
|
||||
for (int i = 0; i < m_uninstallDLLs.size(); i++)
|
||||
if (!strcmp(m_uninstallDLLs[i], dllName))
|
||||
return;
|
||||
m_uninstallDLLs.push_back(strdup(dllName));
|
||||
}
|
||||
|
||||
char* Plugins::GetInstDLL(int i)
|
||||
{
|
||||
if (i >= 0 && i < m_installDLLs.size()) return m_installDLLs[i];
|
||||
else return 0;
|
||||
}
|
||||
|
||||
char* Plugins::GetUninstDLL(int i)
|
||||
{
|
||||
if (i >= 0 && i < m_uninstallDLLs.size()) return m_uninstallDLLs[i];
|
||||
else return 0;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1076,7 +1076,7 @@ int CEXEBuild::write_output(void)
|
|||
|
||||
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT
|
||||
// Added by Amir Szekely 9th August 2002
|
||||
int err=add_plugin_initializer();
|
||||
int err=add_plugins_dir_initializer();
|
||||
if (err != PS_OK) return err;
|
||||
#endif //NSIS_CONFIG_PLUGIN_SUPPORT
|
||||
|
||||
|
@ -1890,15 +1890,15 @@ void CEXEBuild::build_plugin_table(void)
|
|||
}
|
||||
}
|
||||
|
||||
int CEXEBuild::add_plugin_initializer(void)
|
||||
int CEXEBuild::add_plugins_dir_initializer(void)
|
||||
{
|
||||
if (!plugin_used) return PS_OK;
|
||||
|
||||
SCRIPT_MSG("Adding plug-ins initializing function...\n");
|
||||
SCRIPT_MSG("Adding plug-ins initializing function... ");
|
||||
|
||||
bool uninstall = false;
|
||||
|
||||
int ret, i;
|
||||
int ret;
|
||||
entry ent;
|
||||
int zero_offset;
|
||||
|
||||
|
@ -1949,26 +1949,6 @@ again:
|
|||
ret=add_entry(&ent);
|
||||
if (ret != PS_OK) return ret;
|
||||
|
||||
int files_added;
|
||||
if (uninstall) {
|
||||
char* dll;
|
||||
for (i = 0; dll = m_plugins.GetUninstDLL(i); i++) {
|
||||
char tempPath[NSIS_MAX_STRLEN];
|
||||
wsprintf(tempPath,"$PLUGINSDIR%s",strrchr(dll,'\\'));
|
||||
ret=do_add_file(dll,0,0,0,&files_added,tempPath);
|
||||
if (ret != PS_OK) return ret;
|
||||
}
|
||||
}
|
||||
else {
|
||||
char* dll;
|
||||
for (i = 0; dll = m_plugins.GetInstDLL(i); i++) {
|
||||
char tempPath[NSIS_MAX_STRLEN];
|
||||
wsprintf(tempPath,"$PLUGINSDIR%s",strrchr(dll,'\\'));
|
||||
ret=do_add_file(dll,0,0,0,&files_added,tempPath);
|
||||
if (ret != PS_OK) return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (add_label("Initialize_____Plugins_done")) return PS_ERROR;
|
||||
|
||||
ret=function_end();
|
||||
|
|
|
@ -87,7 +87,7 @@ class CEXEBuild {
|
|||
|
||||
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT
|
||||
// Added by Amir Szekely 9th August 2002
|
||||
int add_plugin_initializer(void);
|
||||
int add_plugins_dir_initializer(void);
|
||||
#endif //NSIS_CONFIG_PLUGIN_SUPPORT
|
||||
|
||||
void ERROR_MSG(const char *s, ...);
|
||||
|
|
|
@ -3540,6 +3540,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char
|
|||
if (uninstall_mode) uninst_plugin_used = true;
|
||||
else plugin_used = true;
|
||||
|
||||
// Initialize $PLUGINSDIR
|
||||
ent.which=EW_CALL;
|
||||
ent.offsets[0]=ns_func.add(uninstall_mode?"un.Initialize_____Plugins":"Initialize_____Plugins",0);
|
||||
ret=add_entry(&ent);
|
||||
|
@ -3548,13 +3549,16 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char
|
|||
// DLL name on the user machine
|
||||
char tempDLL[NSIS_MAX_STRLEN];
|
||||
wsprintf(tempDLL, "$PLUGINSDIR%s", strrchr(dllPath,'\\'));
|
||||
int tempDLLtab = add_string(tempDLL);
|
||||
|
||||
// Store the DLL
|
||||
if (uninstall_mode) m_plugins.StoreUninstDLL(dllPath);
|
||||
else m_plugins.StoreInstDLL(dllPath);
|
||||
// Add the DLL to the installer
|
||||
int files_added;
|
||||
int old_build_overwrite=build_overwrite;
|
||||
build_overwrite=1;
|
||||
ret=do_add_file(dllPath,0,0,0,&files_added,tempDLL);
|
||||
if (ret != PS_OK) return ret;
|
||||
build_overwrite=old_build_overwrite;
|
||||
|
||||
// Finally call the DLL
|
||||
// Call the DLL
|
||||
char* command = strstr(line.gettoken_str(0),"::");
|
||||
if (command) command += 2;
|
||||
else command = line.gettoken_str(0);
|
||||
|
@ -3580,7 +3584,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char
|
|||
|
||||
// next, call it
|
||||
ent.which=EW_REGISTERDLL;
|
||||
ent.offsets[0]=tempDLLtab;
|
||||
ent.offsets[0]=add_string(tempDLL);;
|
||||
ent.offsets[1]=add_string(command);
|
||||
ent.offsets[2]=-1;
|
||||
ent.offsets[3]=nounload;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue