- GetTempFile will now try 100 times before failing

- InitPluginsDir will give an error if unable to initialize


git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2406 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2003-04-01 18:07:32 +00:00
parent 8595c5001f
commit 4e037ab153
4 changed files with 120 additions and 80 deletions

View file

@ -2267,10 +2267,10 @@ again:
ret=add_function(uninstall?"un.Initialize_____Plugins":"Initialize_____Plugins"); ret=add_function(uninstall?"un.Initialize_____Plugins":"Initialize_____Plugins");
if (ret != PS_OK) return ret; if (ret != PS_OK) return ret;
// SetDetailsPrint none // SetDetailsPrint none
ent.which=EW_UPDATETEXT; /*ent.which=EW_UPDATETEXT;
ent.offsets[1]=4; // none ent.offsets[1]=4; // none
ret=add_entry(&ent); ret=add_entry(&ent);
if (ret != PS_OK) return ret; if (ret != PS_OK) return ret;*/
zero_offset=add_string("$0"); zero_offset=add_string("$0");
// StrCmp $PLUGINSDIR "" // StrCmp $PLUGINSDIR ""
@ -2285,13 +2285,13 @@ again:
ent.which=EW_PUSHPOP; ent.which=EW_PUSHPOP;
ent.offsets[0]=zero_offset; ent.offsets[0]=zero_offset;
ent.offsets[1]=0; ent.offsets[1]=0;
ent.offsets[3]=0;
ret=add_entry(&ent); ret=add_entry(&ent);
if (ret != PS_OK) return ret; if (ret != PS_OK) return ret;
// Get temp file name // Get temp file name
ent.which=EW_GETTEMPFILENAME; ent.which=EW_GETTEMPFILENAME;
ent.offsets[0]=0; // $0 ent.offsets[0]=0; // $0
ret=add_entry(&ent); ret=add_entry(&ent);
if (ret != PS_OK) return ret;
// Delete the temp file created // Delete the temp file created
ent.which=EW_DELETEFILE; ent.which=EW_DELETEFILE;
ent.offsets[0]=zero_offset; ent.offsets[0]=zero_offset;
@ -2304,8 +2304,15 @@ again:
ent.offsets[1]=0; ent.offsets[1]=0;
ret=add_entry(&ent); ret=add_entry(&ent);
if (ret != PS_OK) return ret; if (ret != PS_OK) return ret;
// Detect errors
if (ret != PS_OK) return ret;
ent.which=EW_IFERRORS;
ent.offsets[0]=ns_label.add("Initialize_____Plugins_error",0);
ret=add_entry(&ent);
if (ret != PS_OK) return ret;
// Copy $0 to $PLUGINSDIR // Copy $0 to $PLUGINSDIR
ent.which=EW_PLUGINCOMMANDPREP; ent.which=EW_PLUGINCOMMANDPREP;
ent.offsets[0]=0;
ret=add_entry(&ent); ret=add_entry(&ent);
if (ret != PS_OK) return ret; if (ret != PS_OK) return ret;
// Pop $0 // Pop $0
@ -2316,7 +2323,27 @@ again:
ret=add_entry(&ent); ret=add_entry(&ent);
if (ret != PS_OK) return ret; if (ret != PS_OK) return ret;
// done
if (add_label("Initialize_____Plugins_done")) return PS_ERROR; if (add_label("Initialize_____Plugins_done")) return PS_ERROR;
ent.which=EW_RET;
ent.offsets[1]=0;
ret=add_entry(&ent);
if (ret != PS_OK) return ret;
// error
if (add_label("Initialize_____Plugins_error")) return PS_ERROR;
// error message box
ent.which=EW_MESSAGEBOX;
ent.offsets[0]=MB_OK|MB_ICONSTOP;
ent.offsets[1]=add_string("Error! Can't initialize plug-ins directory. Please try again later.");
ret=add_entry(&ent);
if (ret != PS_OK) return ret;
// quit
ent.which=EW_QUIT;
ent.offsets[0]=0;
ent.offsets[1]=0;
ret=add_entry(&ent);
if (ret != PS_OK) return ret;
ret=function_end(); ret=function_end();
if (ret != PS_OK) return ret; if (ret != PS_OK) return ret;

View file

@ -85,7 +85,7 @@ static int m_page=-1,m_abort,m_retcode,m_delta=1;
static void NSISCALL outernotify(char num) { static void NSISCALL outernotify(char num) {
if (num==NOTIFY_BYE_BYE) if (num==NOTIFY_BYE_BYE)
g_quit_flag=1; g_quit_flag++;
m_delta=num; m_delta=num;
SendMessage(g_hwnd,WM_NOTIFY_OUTER_NEXT,(WPARAM)num,0); // it sends num again for plugins - DON'T REMOVE! SendMessage(g_hwnd,WM_NOTIFY_OUTER_NEXT,(WPARAM)num,0); // it sends num again for plugins - DON'T REMOVE!
} }
@ -297,6 +297,7 @@ lang_again:
int NSISCALL ui_doinstall(void) int NSISCALL ui_doinstall(void)
{ {
common_header *inst_cmnheader=g_inst_cmnheader;
static WNDCLASS wc; // richedit subclassing and bgbg creation static WNDCLASS wc; // richedit subclassing and bgbg creation
g_flags.autoclose=inst_flags&CH_FLAGS_AUTO_CLOSE; g_flags.autoclose=inst_flags&CH_FLAGS_AUTO_CLOSE;
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
@ -361,7 +362,7 @@ int NSISCALL ui_doinstall(void)
// Multilingual support // Multilingual support
{ {
extern char *g_db_strtab; extern char *g_db_strtab;
language_tables=(void*)(g_db_strtab+g_inst_cmnheader->num_string_bytes); language_tables=(void*)(g_db_strtab+inst_cmnheader->num_string_bytes);
myitoa(state_language, GetUserDefaultLangID()); myitoa(state_language, GetUserDefaultLangID());
set_language(); set_language();
@ -375,7 +376,7 @@ int NSISCALL ui_doinstall(void)
g_hIcon=LoadImage(g_hInstance,MAKEINTRESOURCE(IDI_ICON2),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_SHARED); g_hIcon=LoadImage(g_hInstance,MAKEINTRESOURCE(IDI_ICON2),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_SHARED);
m_bgwnd=0; m_bgwnd=0;
#ifdef NSIS_SUPPORT_BGBG #ifdef NSIS_SUPPORT_BGBG
if (g_inst_cmnheader->bg_color1 != -1) if (inst_cmnheader->bg_color1 != -1)
{ {
RECT vp; RECT vp;
extern int bg_color1, bg_color2, bg_textcolor; extern int bg_color1, bg_color2, bg_textcolor;
@ -388,9 +389,9 @@ int NSISCALL ui_doinstall(void)
if (!RegisterClass(&wc)) return 0; if (!RegisterClass(&wc)) return 0;
bg_color1=g_inst_cmnheader->bg_color1; bg_color1=inst_cmnheader->bg_color1;
bg_color2=g_inst_cmnheader->bg_color2; bg_color2=inst_cmnheader->bg_color2;
bg_textcolor=g_inst_cmnheader->bg_textcolor; bg_textcolor=inst_cmnheader->bg_textcolor;
SystemParametersInfo(SPI_GETWORKAREA, 0, &vp, 0); SystemParametersInfo(SPI_GETWORKAREA, 0, &vp, 0);
@ -401,7 +402,7 @@ int NSISCALL ui_doinstall(void)
#ifdef NSIS_SUPPORT_CODECALLBACKS #ifdef NSIS_SUPPORT_CODECALLBACKS
g_hwnd=m_bgwnd; g_hwnd=m_bgwnd;
// Select language // Select language
if (ExecuteCodeSegment(g_inst_cmnheader->code_onInit,NULL)) return 1; if (ExecuteCodeSegment(inst_cmnheader->code_onInit,NULL)) return 1;
set_language(); set_language();
g_hwnd=NULL; g_hwnd=NULL;
ShowWindow(m_bgwnd, SW_SHOW); ShowWindow(m_bgwnd, SW_SHOW);
@ -438,18 +439,18 @@ int NSISCALL ui_doinstall(void)
#endif #endif
{ {
#ifdef NSIS_SUPPORT_CODECALLBACKS #ifdef NSIS_SUPPORT_CODECALLBACKS
if (ExecuteCodeSegment(g_inst_cmnheader->code_onInit,NULL)) return 1; if (ExecuteCodeSegment(inst_cmnheader->code_onInit,NULL)) return 1;
set_language(); set_language();
#endif//NSIS_SUPPORT_CODECALLBACKS #endif//NSIS_SUPPORT_CODECALLBACKS
if (install_thread(NULL)) if (install_thread(NULL))
{ {
#ifdef NSIS_SUPPORT_CODECALLBACKS #ifdef NSIS_SUPPORT_CODECALLBACKS
if (!g_quit_flag) ExecuteCodeSegment(g_inst_cmnheader->code_onInstFailed,NULL); if (!g_quit_flag) ExecuteCodeSegment(inst_cmnheader->code_onInstFailed,NULL);
#endif//NSIS_SUPPORT_CODECALLBACKS #endif//NSIS_SUPPORT_CODECALLBACKS
return 1; return 1;
} }
#ifdef NSIS_SUPPORT_CODECALLBACKS #ifdef NSIS_SUPPORT_CODECALLBACKS
ExecuteCodeSegment(g_inst_cmnheader->code_onInstSuccess,NULL); ExecuteCodeSegment(inst_cmnheader->code_onInstSuccess,NULL);
#endif//NSIS_SUPPORT_CODECALLBACKS #endif//NSIS_SUPPORT_CODECALLBACKS
return 0; return 0;

View file

@ -192,7 +192,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
log_printf2("detailprint: %s",buf3); log_printf2("detailprint: %s",buf3);
update_status_text(buf3,""); update_status_text(buf3,"");
} }
return 0; break;
case EW_SLEEP: case EW_SLEEP:
{ {
int x=process_string_fromparm_toint(0); int x=process_string_fromparm_toint(0);
@ -200,18 +200,18 @@ static int NSISCALL ExecuteEntry(entry *entry_)
log_printf2("Sleep(%d)",x); log_printf2("Sleep(%d)",x);
Sleep(x); Sleep(x);
} }
return 0; break;
case EW_BRINGTOFRONT: case EW_BRINGTOFRONT:
log_printf("BringToFront"); log_printf("BringToFront");
SetForegroundWindow(g_hwnd); SetForegroundWindow(g_hwnd);
return 0; break;
case EW_SETFLAG: case EW_SETFLAG:
g_flags.flags[parm0]=parm1; g_flags.flags[parm0]=parm1;
return 0; break;
case EW_CHDETAILSVIEW: case EW_CHDETAILSVIEW:
if (insthwndbutton) ShowWindow(insthwndbutton,parm1); if (insthwndbutton) ShowWindow(insthwndbutton,parm1);
if (insthwnd) ShowWindow(insthwnd,parm0); if (insthwnd) ShowWindow(insthwnd,parm0);
return 0; break;
case EW_SETFILEATTRIBUTES: { case EW_SETFILEATTRIBUTES: {
char *buf1=process_string_fromparm_tobuf(-0x10); char *buf1=process_string_fromparm_tobuf(-0x10);
log_printf3("SetFileAttributes: \"%s\":%08X",buf1,parm1); log_printf3("SetFileAttributes: \"%s\":%08X",buf1,parm1);
@ -221,7 +221,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
log_printf("SetFileAttributes failed."); log_printf("SetFileAttributes failed.");
} }
} }
return 0; break;
case EW_CREATEDIR: { case EW_CREATEDIR: {
char *buf1=process_string_fromparm_tobuf(-0x10); char *buf1=process_string_fromparm_tobuf(-0x10);
log_printf3("CreateDirectory: \"%s\" (%d)",buf1,parm1); log_printf3("CreateDirectory: \"%s\" (%d)",buf1,parm1);
@ -248,7 +248,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
} }
else return 0; else break;
while (c) while (c)
{ {
while (*p != '\\' && *p) p=CharNext(p); while (*p != '\\' && *p) p=CharNext(p);
@ -262,7 +262,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
} }
} }
return 0; break;
case EW_IFFILEEXISTS: case EW_IFFILEEXISTS:
{ {
char *buf0=process_string_fromparm_tobuf(0x00); char *buf0=process_string_fromparm_tobuf(0x00);
@ -316,7 +316,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_RENAME #endif//NSIS_SUPPORT_RENAME
#ifdef NSIS_SUPPORT_FNUTIL #ifdef NSIS_SUPPORT_FNUTIL
case EW_GETFULLPATHNAME: case EW_GETFULLPATHNAME:
@ -344,7 +344,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
if (!parm2) GetShortPathName(p,p,NSIS_MAX_STRLEN); if (!parm2) GetShortPathName(p,p,NSIS_MAX_STRLEN);
} }
return 0; break;
case EW_SEARCHPATH: case EW_SEARCHPATH:
{ {
char *fp; char *fp;
@ -356,17 +356,20 @@ static int NSISCALL ExecuteEntry(entry *entry_)
p[0]=0; p[0]=0;
} }
} }
return 0; break;
case EW_GETTEMPFILENAME: case EW_GETTEMPFILENAME:
{ {
char *textout=var0; char *textout=var0;
if (!GetTempFileName(temp_directory,"nst",0,textout)) int n=100;
while (n--)
{ {
g_flags.exec_error++; if (GetTempFileName(temp_directory,"nst",0,textout))
*textout=0; return 0;
} }
g_flags.exec_error++;
*textout=0;
} }
return 0; break;
#endif #endif
#ifdef NSIS_SUPPORT_FILE #ifdef NSIS_SUPPORT_FILE
case EW_EXTRACTFILE: case EW_EXTRACTFILE:
@ -407,7 +410,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
update_status_text_from_lang(LANG_SKIPPED,buf3); update_status_text_from_lang(LANG_SKIPPED,buf3);
if (overwriteflag==2) g_flags.exec_error++; if (overwriteflag==2) g_flags.exec_error++;
log_printf3("File: skipped: \"%s\" (overwriteflag=%d)",buf0,overwriteflag); log_printf3("File: skipped: \"%s\" (overwriteflag=%d)",buf0,overwriteflag);
return 0; break;
} }
log_printf2("File: error creating \"%s\"",buf0); log_printf2("File: error creating \"%s\"",buf0);
mystrcpy(buf2,g_usrvars[0]);//save $0 mystrcpy(buf2,g_usrvars[0]);//save $0
@ -459,7 +462,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
#undef overwriteflag #undef overwriteflag
} }
return 0; break;
#endif//NSIS_SUPPORT_FILE #endif//NSIS_SUPPORT_FILE
#ifdef NSIS_SUPPORT_DELETE #ifdef NSIS_SUPPORT_DELETE
case EW_DELETEFILE: case EW_DELETEFILE:
@ -508,7 +511,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
FindClose(h); FindClose(h);
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_DELETE #endif//NSIS_SUPPORT_DELETE
#ifdef NSIS_SUPPORT_MESSAGEBOX #ifdef NSIS_SUPPORT_MESSAGEBOX
case EW_MESSAGEBOX: // MessageBox case EW_MESSAGEBOX: // MessageBox
@ -530,7 +533,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
else g_flags.exec_error++; else g_flags.exec_error++;
} }
return 0; break;
#endif//NSIS_SUPPORT_MESSAGEBOX #endif//NSIS_SUPPORT_MESSAGEBOX
#ifdef NSIS_SUPPORT_RMDIR #ifdef NSIS_SUPPORT_RMDIR
case EW_RMDIR: case EW_RMDIR:
@ -543,14 +546,14 @@ static int NSISCALL ExecuteEntry(entry *entry_)
doRMDir(buf0,parm1); doRMDir(buf0,parm1);
if (file_exists(buf0) && parm1!=2) g_flags.exec_error++; if (file_exists(buf0) && parm1!=2) g_flags.exec_error++;
} }
return 0; break;
#endif//NSIS_SUPPORT_RMDIR #endif//NSIS_SUPPORT_RMDIR
#ifdef NSIS_SUPPORT_STROPTS #ifdef NSIS_SUPPORT_STROPTS
case EW_STRLEN: { case EW_STRLEN: {
char *buf0=process_string_fromparm_tobuf(0x01); char *buf0=process_string_fromparm_tobuf(0x01);
myitoa(var0,mystrlen(buf0)); myitoa(var0,mystrlen(buf0));
} }
return 0; break;
case EW_ASSIGNVAR: case EW_ASSIGNVAR:
{ {
int newlen=process_string_fromparm_toint(2); int newlen=process_string_fromparm_toint(2);
@ -577,7 +580,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
} }
} }
return 0; break;
case EW_STRCMP: { case EW_STRCMP: {
char *buf2=process_string_fromparm_tobuf(0x20); char *buf2=process_string_fromparm_tobuf(0x20);
char *buf3=process_string_fromparm_tobuf(0x31); char *buf3=process_string_fromparm_tobuf(0x31);
@ -604,7 +607,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
p[NSIS_MAX_STRLEN-1]=0; p[NSIS_MAX_STRLEN-1]=0;
} }
return 0; break;
#endif//NSIS_SUPPORT_ENVIRONMENT #endif//NSIS_SUPPORT_ENVIRONMENT
#ifdef NSIS_SUPPORT_INTOPTS #ifdef NSIS_SUPPORT_INTOPTS
case EW_INTCMP: case EW_INTCMP:
@ -646,14 +649,14 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
myitoa(p,v); myitoa(p,v);
} }
return 0; break;
case EW_INTFMT: { case EW_INTFMT: {
char *buf0=process_string_fromparm_tobuf(0x01); char *buf0=process_string_fromparm_tobuf(0x01);
wsprintf(var0, wsprintf(var0,
buf0, buf0,
process_string_fromparm_toint(2)); process_string_fromparm_toint(2));
} }
return 0; break;
#endif//NSIS_SUPPORT_INTOPTS #endif//NSIS_SUPPORT_INTOPTS
#ifdef NSIS_SUPPORT_STACK #ifdef NSIS_SUPPORT_STACK
case EW_PUSHPOP: case EW_PUSHPOP:
@ -666,7 +669,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
if (!s) if (!s)
{ {
log_printf2("Exch: stack < %d elements",parm2); log_printf2("Exch: stack < %d elements",parm2);
break; my_MessageBox(LANG_STR(LANG_INSTCORRUPTED),MB_OK|MB_ICONSTOP);
return EXEC_ERROR;
} }
mystrcpy(buf0,s->text); mystrcpy(buf0,s->text);
mystrcpy(s->text,g_st->text); mystrcpy(s->text,g_st->text);
@ -678,7 +682,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
{ {
log_printf("Pop: stack empty"); log_printf("Pop: stack empty");
g_flags.exec_error++; g_flags.exec_error++;
return 0; break;
} }
mystrcpy(var0,s->text); mystrcpy(var0,s->text);
g_st=s->next; g_st=s->next;
@ -692,7 +696,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
g_st=s; g_st=s;
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_STACK #endif//NSIS_SUPPORT_STACK
#ifdef NSIS_SUPPORT_HWNDS #ifdef NSIS_SUPPORT_HWNDS
case EW_FINDWINDOW: case EW_FINDWINDOW:
@ -722,7 +726,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
if (parm0>=0) if (parm0>=0)
myitoa(var0,v); myitoa(var0,v);
} }
return 0; break;
case EW_ISWINDOW: case EW_ISWINDOW:
if (IsWindow((HWND)process_string_fromparm_toint(0))) return parm1; if (IsWindow((HWND)process_string_fromparm_toint(0))) return parm1;
return parm2; return parm2;
@ -735,14 +739,14 @@ static int NSISCALL ExecuteEntry(entry *entry_)
process_string_fromparm_toint(2) process_string_fromparm_toint(2)
) )
); );
return 0; break;
case EW_GETWINTEXT: case EW_GETWINTEXT:
my_GetWindowText( my_GetWindowText(
(HWND)process_string_fromparm_toint(1), (HWND)process_string_fromparm_toint(1),
var0, var0,
NSIS_MAX_STRLEN NSIS_MAX_STRLEN
); );
return 0; break;
case EW_SETBKCOLOR: case EW_SETBKCOLOR:
{ {
DeleteObject( DeleteObject(
@ -754,7 +758,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
) )
); );
} }
return 0; break;
case EW_SETBRANDINGIMAGE: case EW_SETBRANDINGIMAGE:
{ {
RECT r; RECT r;
@ -777,7 +781,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
(LPARAM)hImage (LPARAM)hImage
); );
} }
return 0; break;
case EW_CREATEFONT: case EW_CREATEFONT:
{ {
static LOGFONT f; static LOGFONT f;
@ -790,11 +794,11 @@ static int NSISCALL ExecuteEntry(entry *entry_)
process_string_fromtab(f.lfFaceName,parm1); process_string_fromtab(f.lfFaceName,parm1);
myitoa(var0,(int)CreateFontIndirect(&f)); myitoa(var0,(int)CreateFontIndirect(&f));
} }
return 0; break;
case EW_SHOWWINDOW: case EW_SHOWWINDOW:
if (parm2) log_printf("HideWindow"); if (parm2) log_printf("HideWindow");
ShowWindow((HWND)process_string_fromparm_toint(0),process_string_fromparm_toint(1)); ShowWindow((HWND)process_string_fromparm_toint(0),process_string_fromparm_toint(1));
return 0; break;
#endif//NSIS_CONFIG_ENHANCEDUI_SUPPORT #endif//NSIS_CONFIG_ENHANCEDUI_SUPPORT
#endif//NSIS_SUPPORT_HWNDS #endif//NSIS_SUPPORT_HWNDS
#ifdef NSIS_SUPPORT_SHELLEXECUTE #ifdef NSIS_SUPPORT_SHELLEXECUTE
@ -817,7 +821,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
log_printf4("ExecShell: success (\"%s\": file:\"%s\" params:\"%s\")",buf0,buf1,buf2); log_printf4("ExecShell: success (\"%s\": file:\"%s\" params:\"%s\")",buf0,buf1,buf2);
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_SHELLEXECUTE #endif//NSIS_SUPPORT_SHELLEXECUTE
#ifdef NSIS_SUPPORT_EXECUTE #ifdef NSIS_SUPPORT_EXECUTE
case EW_EXECUTE: case EW_EXECUTE:
@ -854,7 +858,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
log_printf2("Exec: failed createprocess (\"%s\")",buf0); log_printf2("Exec: failed createprocess (\"%s\")",buf0);
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_EXECUTE #endif//NSIS_SUPPORT_EXECUTE
#ifdef NSIS_SUPPORT_GETFILETIME #ifdef NSIS_SUPPORT_GETFILETIME
case EW_GETFILETIME: case EW_GETFILETIME:
@ -879,7 +883,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
g_flags.exec_error++; g_flags.exec_error++;
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_GETFILETIME #endif//NSIS_SUPPORT_GETFILETIME
#ifdef NSIS_SUPPORT_GETDLLVERSION #ifdef NSIS_SUPPORT_GETDLLVERSION
case EW_GETDLLVERSION: case EW_GETDLLVERSION:
@ -912,7 +916,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_GETDLLVERSION #endif//NSIS_SUPPORT_GETDLLVERSION
#ifdef NSIS_SUPPORT_ACTIVEXREG #ifdef NSIS_SUPPORT_ACTIVEXREG
case EW_REGISTERDLL: case EW_REGISTERDLL:
@ -971,7 +975,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
log_printf("Error registering DLL: Could not initialize OLE"); log_printf("Error registering DLL: Could not initialize OLE");
} }
} }
return 0; break;
#endif #endif
#ifdef NSIS_SUPPORT_CREATESHORTCUT #ifdef NSIS_SUPPORT_CREATESHORTCUT
case EW_CREATESHORTCUT: { case EW_CREATESHORTCUT: {
@ -1033,7 +1037,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
update_status_text_from_lang(LANG_CREATESHORTCUT,buf2); update_status_text_from_lang(LANG_CREATESHORTCUT,buf2);
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_CREATESHORTCUT #endif//NSIS_SUPPORT_CREATESHORTCUT
#ifdef NSIS_SUPPORT_COPYFILES #ifdef NSIS_SUPPORT_COPYFILES
case EW_COPYFILES: // CopyFile (added by NOP) case EW_COPYFILES: // CopyFile (added by NOP)
@ -1062,10 +1066,15 @@ static int NSISCALL ExecuteEntry(entry *entry_)
g_flags.exec_error++; g_flags.exec_error++;
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_COPYFILES #endif//NSIS_SUPPORT_COPYFILES
#ifdef NSIS_SUPPORT_REBOOT #ifdef NSIS_SUPPORT_REBOOT
case EW_REBOOT: case EW_REBOOT:
if (parm0!=0xbadf00d)
{
my_MessageBox(LANG_STR(LANG_INSTCORRUPTED),MB_OK|MB_ICONSTOP);
return EXEC_ERROR;
}
g_flags.exec_error++; g_flags.exec_error++;
{ {
HANDLE h=LoadLibrary("advapi32.dll"); HANDLE h=LoadLibrary("advapi32.dll");
@ -1091,11 +1100,14 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
} }
if (ExitWindowsEx(EWX_REBOOT,0)) ExitProcess(0); if (ExitWindowsEx(EWX_REBOOT,0))
{
g_quit_flag++;
PostQuitMessage(0);
return EXEC_ERROR;
}
FreeLibrary(h); FreeLibrary(h);
return 0;
} }
break; break;
case EW_IFREBOOTFLAG: return entry_->offsets[!g_flags.exec_reboot]; case EW_IFREBOOTFLAG: return entry_->offsets[!g_flags.exec_reboot];
@ -1124,7 +1136,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
log_printf5("WriteINIStr: wrote [%s] %s=%s in %s",buf0,buf1,buf2,buf3); log_printf5("WriteINIStr: wrote [%s] %s=%s in %s",buf0,buf1,buf2,buf3);
if (!WritePrivateProfileString(sec,key,str,buf3)) g_flags.exec_error++; if (!WritePrivateProfileString(sec,key,str,buf3)) g_flags.exec_error++;
} }
return 0; break;
case EW_READINISTR: case EW_READINISTR:
{ {
const char *errstr="!N~"; const char *errstr="!N~";
@ -1139,7 +1151,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
p[0]=0; p[0]=0;
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_INIFILES #endif//NSIS_SUPPORT_INIFILES
#ifdef NSIS_SUPPORT_REGISTRYFUNCTIONS #ifdef NSIS_SUPPORT_REGISTRYFUNCTIONS
case EW_DELREG: case EW_DELREG:
@ -1164,7 +1176,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
if (myRegDeleteKeyEx((HKEY)rootkey,buf3,parm3&2) == ERROR_SUCCESS) g_flags.exec_error--; if (myRegDeleteKeyEx((HKEY)rootkey,buf3,parm3&2) == ERROR_SUCCESS) g_flags.exec_error--;
} }
} }
return 0; break;
case EW_WRITEREG: // write registry value case EW_WRITEREG: // write registry value
{ {
HKEY hKey; HKEY hKey;
@ -1202,7 +1214,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
else { log_printf3("WriteReg: error creating key %d\\%s",rootkey,buf3); } else { log_printf3("WriteReg: error creating key %d\\%s",rootkey,buf3); }
} }
return 0; break;
case EW_READREGSTR: // read registry string case EW_READREGSTR: // read registry string
{ {
HKEY hKey; HKEY hKey;
@ -1235,7 +1247,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
else g_flags.exec_error++; else g_flags.exec_error++;
} }
return 0; break;
case EW_REGENUM: case EW_REGENUM:
{ {
HKEY key; HKEY key;
@ -1254,7 +1266,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
else g_flags.exec_error++; else g_flags.exec_error++;
} }
return 0; break;
#endif//NSIS_SUPPORT_REGISTRYFUNCTIONS #endif//NSIS_SUPPORT_REGISTRYFUNCTIONS
#ifdef NSIS_SUPPORT_FILEFUNCTIONS #ifdef NSIS_SUPPORT_FILEFUNCTIONS
case EW_FCLOSE: case EW_FCLOSE:
@ -1262,7 +1274,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
char *t=var0; char *t=var0;
if (*t) CloseHandle((HANDLE)myatoi(t)); if (*t) CloseHandle((HANDLE)myatoi(t));
} }
return 0; break;
case EW_FOPEN: case EW_FOPEN:
{ {
HANDLE h; HANDLE h;
@ -1279,7 +1291,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
myitoa(handleout,(int)h); myitoa(handleout,(int)h);
} }
} }
return 0; break;
case EW_FPUTS: case EW_FPUTS:
{ {
DWORD dw; DWORD dw;
@ -1299,7 +1311,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
g_flags.exec_error++; g_flags.exec_error++;
} }
} }
return 0; break;
case EW_FGETS: case EW_FGETS:
{ {
char *textout=var1; char *textout=var1;
@ -1307,7 +1319,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
int rpos=0; int rpos=0;
char *hptr=var0; char *hptr=var0;
int maxlen=process_string_fromparm_toint(2); int maxlen=process_string_fromparm_toint(2);
if (maxlen<1) return 0; if (maxlen<1) break;
if (maxlen > NSIS_MAX_STRLEN-1) maxlen=NSIS_MAX_STRLEN-1; if (maxlen > NSIS_MAX_STRLEN-1) maxlen=NSIS_MAX_STRLEN-1;
if (*hptr) if (*hptr)
{ {
@ -1337,7 +1349,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
textout[rpos]=0; textout[rpos]=0;
if (!rpos) g_flags.exec_error++; if (!rpos) g_flags.exec_error++;
} }
return 0; break;
case EW_FSEEK: case EW_FSEEK:
{ {
char *t=var0; char *t=var0;
@ -1351,7 +1363,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_FILEFUNCTIONS #endif//NSIS_SUPPORT_FILEFUNCTIONS
#ifdef NSIS_SUPPORT_FINDFIRST #ifdef NSIS_SUPPORT_FINDFIRST
case EW_FINDCLOSE: case EW_FINDCLOSE:
@ -1359,7 +1371,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
char *t=var0; char *t=var0;
if (*t) FindClose((HANDLE)myatoi(t)); if (*t) FindClose((HANDLE)myatoi(t));
} }
return 0; break;
case EW_FINDNEXT: case EW_FINDNEXT:
{ {
char *textout=var0; char *textout=var0;
@ -1376,7 +1388,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
} }
return 0; break;
case EW_FINDFIRST: case EW_FINDFIRST:
{ {
char *textout=var1; char *textout=var1;
@ -1397,7 +1409,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
mystrcpy(textout,fd.cFileName); mystrcpy(textout,fd.cFileName);
} }
} }
return 0; break;
#endif//NSIS_SUPPORT_FINDFIRST #endif//NSIS_SUPPORT_FINDFIRST
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
case EW_WRITEUNINSTALLER: case EW_WRITEUNINSTALLER:
@ -1463,7 +1475,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
else else
update_status_text_from_lang(LANG_CREATEDUNINST,buf0); update_status_text_from_lang(LANG_CREATEDUNINST,buf0);
} }
return 0; break;
#endif//NSIS_CONFIG_UNINSTALL_SUPPORT #endif//NSIS_CONFIG_UNINSTALL_SUPPORT
#ifdef NSIS_CONFIG_LOG #ifdef NSIS_CONFIG_LOG
case EW_LOG: case EW_LOG:
@ -1479,14 +1491,14 @@ static int NSISCALL ExecuteEntry(entry *entry_)
char *buf0=process_string_fromparm_tobuf(0x01); char *buf0=process_string_fromparm_tobuf(0x01);
log_printf2("%s",buf0); log_printf2("%s",buf0);
} }
return 0; break;
#endif//NSIS_CONFIG_LOG #endif//NSIS_CONFIG_LOG
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT #ifdef NSIS_CONFIG_PLUGIN_SUPPORT
// Added by Ximon Eighteen 5th August 2002 // Added by Ximon Eighteen 5th August 2002
case EW_PLUGINCOMMANDPREP: case EW_PLUGINCOMMANDPREP:
// $0 temp plug-ins dir // $0 temp plug-ins dir
if (!*plugins_temp_dir) mystrcpy(plugins_temp_dir,g_usrvars[0]); if (!*plugins_temp_dir) mystrcpy(plugins_temp_dir,g_usrvars[0]);
return 0; break;
#endif // NSIS_CONFIG_PLUGIN_SUPPORT #endif // NSIS_CONFIG_PLUGIN_SUPPORT
#ifdef NSIS_CONFIG_COMPONENTPAGE #ifdef NSIS_CONFIG_COMPONENTPAGE
case EW_SECTIONSET: case EW_SECTIONSET:
@ -1532,9 +1544,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
} }
else g_flags.exec_error++; else g_flags.exec_error++;
} }
return 0; break;
#endif//NSIS_CONFIG_COMPONENTPAGE #endif//NSIS_CONFIG_COMPONENTPAGE
} }
my_MessageBox(LANG_STR(LANG_INSTCORRUPTED),MB_OK|MB_ICONSTOP); return 0;
return EXEC_ERROR; }
}

View file

@ -3993,6 +3993,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char
#ifdef NSIS_SUPPORT_REBOOT #ifdef NSIS_SUPPORT_REBOOT
case TOK_REBOOT: case TOK_REBOOT:
ent.which=EW_REBOOT; ent.which=EW_REBOOT;
ent.offsets[0]=0xbadf00d;
SCRIPT_MSG("Reboot! (WOW)\n"); SCRIPT_MSG("Reboot! (WOW)\n");
return add_entry(&ent); return add_entry(&ent);
case TOK_IFREBOOTFLAG: case TOK_IFREBOOTFLAG: