Small space-saving optimisations

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@693 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
eccles 2002-08-19 21:24:44 +00:00
parent 1ee06159ec
commit 7a2cf3e5b8
5 changed files with 104 additions and 96 deletions

View file

@ -1,8 +1,8 @@
/* /*
Nullsoft "SuperPimp" Installation System - main.c - executable header main code Nullsoft "SuperPimp" Installation System - main.c - executable header main code
Copyright (C) 1999-2002 Nullsoft, Inc. Copyright (C) 1999-2002 Nullsoft, Inc.
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
arising from the use of this software. arising from the use of this software.
@ -19,7 +19,7 @@
misrepresented as being the original software. misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
This source distribution includes portions of zlib. see zlib/zlib.h for This source distribution includes portions of zlib. see zlib/zlib.h for
its license and so forth. Note that this license is also borrowed from zlib. its license and so forth. Note that this license is also borrowed from zlib.
*/ */
@ -66,7 +66,7 @@ extern char plugins_temp_dir[NSIS_MAX_STRLEN];
#ifdef NSIS_CONFIG_CRC_SUPPORT #ifdef NSIS_CONFIG_CRC_SUPPORT
static BOOL CALLBACK verProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) static BOOL CALLBACK verProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
if (uMsg == WM_INITDIALOG) if (uMsg == WM_INITDIALOG)
{ {
SetTimer(hwndDlg,1,250,NULL); SetTimer(hwndDlg,1,250,NULL);
uMsg = WM_TIMER; uMsg = WM_TIMER;
@ -142,19 +142,19 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
no_crc++; no_crc++;
cmdline+=4; cmdline+=4;
} }
else else
#endif//NSIS_CONFIG_CRC_SUPPORT #endif//NSIS_CONFIG_CRC_SUPPORT
if (cmdline[0] == 'D' && cmdline[1] == '=') if (cmdline[0] == 'D' && cmdline[1] == '=')
{ {
cmdline[-2]=0; // keep this from being passed to uninstaller if necessary cmdline[-2]=0; // keep this from being passed to uninstaller if necessary
lstrcpy(state_install_directory,cmdline+2); mystrcpy(state_install_directory,cmdline+2);
cmdline+=lstrlen(cmdline); cmdline+=mystrlen(cmdline);
} }
else while (*cmdline && *cmdline != ' ') cmdline=CharNext(cmdline); else while (*cmdline && *cmdline != ' ') cmdline=CharNext(cmdline);
} }
while (*cmdline); while (*cmdline);
lstrcpy(g_caption,_LANG_GENERIC_ERROR); mystrcpy(g_caption,_LANG_GENERIC_ERROR);
g_hInstance=GetModuleHandle(NULL); g_hInstance=GetModuleHandle(NULL);
GetModuleFileName(g_hInstance,state_exe_directory,NSIS_MAX_STRLEN); GetModuleFileName(g_hInstance,state_exe_directory,NSIS_MAX_STRLEN);
@ -167,7 +167,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
} }
// make state_exe_directory point to dir, not full exe. // make state_exe_directory point to dir, not full exe.
trimslashtoend(state_exe_directory); trimslashtoend(state_exe_directory);
left = m_length = GetFileSize(g_db_hFile,NULL); left = m_length = GetFileSize(g_db_hFile,NULL);
@ -210,11 +210,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
#ifndef NSIS_CONFIG_CRC_ANAL #ifndef NSIS_CONFIG_CRC_ANAL
left=dbl-4; left=dbl-4;
// end crc checking at crc :) this means you can tack shit on the end and it'll still work. // end crc checking at crc :) this means you can tack shit on the end and it'll still work.
#else //!NSIS_CONFIG_CRC_ANAL #else //!NSIS_CONFIG_CRC_ANAL
left-=4; left-=4;
#endif//NSIS_CONFIG_CRC_ANAL #endif//NSIS_CONFIG_CRC_ANAL
// this is in case the end part is < 512 bytes. // this is in case the end part is < 512 bytes.
if (l > (DWORD)left) l=(DWORD)left; if (l > (DWORD)left) l=(DWORD)left;
#else//!NSIS_CONFIG_CRC_SUPPORT #else//!NSIS_CONFIG_CRC_SUPPORT
@ -235,13 +235,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
static MSG msg; static MSG msg;
while (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) DispatchMessage(&msg); while (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) DispatchMessage(&msg);
} }
else if (GetTickCount() > verify_time) else if (GetTickCount() > verify_time)
hwnd=CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_VERIFY),GetDesktopWindow(),verProc); hwnd=CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_VERIFY),GetDesktopWindow(),verProc);
} }
#endif//NSIS_CONFIG_VISIBLE_SUPPORT #endif//NSIS_CONFIG_VISIBLE_SUPPORT
#ifndef NSIS_CONFIG_CRC_ANAL #ifndef NSIS_CONFIG_CRC_ANAL
if (left<m_length) if (left<m_length)
#endif//NSIS_CONFIG_CRC_ANAL #endif//NSIS_CONFIG_CRC_ANAL
crc=CRC32(crc, temp, l); crc=CRC32(crc, temp, l);
@ -255,7 +255,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
#endif//NSIS_CONFIG_CRC_SUPPORT #endif//NSIS_CONFIG_CRC_SUPPORT
#endif//NSIS_CONFIG_VISIBLE_SUPPORT #endif//NSIS_CONFIG_VISIBLE_SUPPORT
if (!g_filehdrsize) m_Err=g_crcinvalid; if (!g_filehdrsize) m_Err=g_crcinvalid;
else else
{ {
#ifdef NSIS_CONFIG_CRC_SUPPORT #ifdef NSIS_CONFIG_CRC_SUPPORT
if (do_crc) if (do_crc)
@ -270,7 +270,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
} }
} }
#endif//NSIS_CONFIG_CRC_SUPPORT #endif//NSIS_CONFIG_CRC_SUPPORT
SetFilePointer(g_db_hFile,g_filehdrsize,NULL,FILE_BEGIN); SetFilePointer(g_db_hFile,g_filehdrsize,NULL,FILE_BEGIN);
if (loadHeaders()) m_Err=g_crcinvalid; if (loadHeaders()) m_Err=g_crcinvalid;
} }
@ -285,8 +285,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
cmdline+=2; cmdline+=2;
if (is_valid_instpath(cmdline)) if (is_valid_instpath(cmdline))
{ {
lstrcpy(state_install_directory,cmdline); mystrcpy(state_install_directory,cmdline);
lstrcpy(state_output_directory,cmdline); mystrcpy(state_output_directory,cmdline);
} }
else else
{ {
@ -303,13 +303,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
static char s[]="A~NSISu_.exe"; static char s[]="A~NSISu_.exe";
static char buf2[NSIS_MAX_STRLEN*2]; static char buf2[NSIS_MAX_STRLEN*2];
static char ibuf[NSIS_MAX_STRLEN]; static char ibuf[NSIS_MAX_STRLEN];
buf2[0]='\"'; buf2[0]='\"';
GetTempPath(sizeof(buf2)-1,buf2+1); GetTempPath(sizeof(buf2)-1,buf2+1);
lstrcat(buf2,s); lstrcat(buf2,s);
DeleteFile(buf2+1); // clean up after all the other ones if they are there DeleteFile(buf2+1); // clean up after all the other ones if they are there
if (!done) if (!done)
{ {
// get current name // get current name
@ -324,7 +324,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
#ifdef NSIS_SUPPORT_MOVEONREBOOT #ifdef NSIS_SUPPORT_MOVEONREBOOT
MoveFileOnReboot(buf2+1,NULL); MoveFileOnReboot(buf2+1,NULL);
#endif #endif
if (state_install_directory[0]) lstrcpy(ibuf,state_install_directory); if (state_install_directory[0]) mystrcpy(ibuf,state_install_directory);
else trimslashtoend(ibuf); else trimslashtoend(ibuf);
if (!is_valid_instpath(ibuf)) break; if (!is_valid_instpath(ibuf)) break;
done++; done++;
@ -341,7 +341,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
s[0]++; s[0]++;
} }
if (!done) m_Err=g_errorcopyinginstall; if (!done) m_Err=g_errorcopyinginstall;
goto end; goto end;
} }
} }
#endif//NSIS_CONFIG_UNINSTALL_SUPPORT #endif//NSIS_CONFIG_UNINSTALL_SUPPORT

View file

@ -104,24 +104,24 @@ HWND m_curwnd;
static int m_whichcfg; static int m_whichcfg;
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT #ifdef NSIS_CONFIG_VISIBLE_SUPPORT
BOOL SetDlgItemTextFromLang(HWND dlg, WORD id, langid_t lid) { static BOOL SetDlgItemTextFromLang(HWND dlg, WORD id, langid_t lid) {
return SetDlgItemText(dlg,id,STR(GetLangString(lid))); return SetDlgItemText(dlg,id,STR(GetLangString(lid)));
} }
BOOL SetUITextFromLang(HWND defhw, WORD def, WORD custom, langid_t lid) { static BOOL SetUITextFromLang(HWND defhw, WORD def, WORD custom, langid_t lid) {
return SetDlgItemTextFromLang(custom?g_hwnd:defhw,custom?custom:def,lid); return SetDlgItemTextFromLang(custom?g_hwnd:defhw,custom?custom:def,lid);
} }
// no tab // no tab
BOOL SetUITextNT(HWND defhw, WORD def, WORD custom, const char *text) { static BOOL SetUITextNT(HWND defhw, WORD def, WORD custom, const char *text) {
return SetDlgItemText(custom?g_hwnd:defhw,custom?custom:def,text); return SetDlgItemText(custom?g_hwnd:defhw,custom?custom:def,text);
} }
UINT GetUIText(WORD def, WORD custom, char *str, int max_size) { static UINT GetUIText(WORD def, WORD custom, char *str, int max_size) {
return GetDlgItemText(custom?g_hwnd:m_curwnd,custom?custom:def,str,max_size); return GetDlgItemText(custom?g_hwnd:m_curwnd,custom?custom:def,str,max_size);
} }
HWND GetUIItem(HWND defhw, WORD def, WORD custom) { static HWND GetUIItem(HWND defhw, WORD def, WORD custom) {
return GetDlgItem(custom?g_hwnd:defhw,custom?custom:def); return GetDlgItem(custom?g_hwnd:defhw,custom?custom:def);
} }
#endif #endif
@ -129,8 +129,7 @@ HWND GetUIItem(HWND defhw, WORD def, WORD custom) {
#ifdef NSIS_CONFIG_LOG #ifdef NSIS_CONFIG_LOG
static void build_g_logfile() static void build_g_logfile()
{ {
lstrcpy(g_log_file,state_install_directory); addtrailingslash(mystrcpy(g_log_file,state_install_directory));
addtrailingslash(g_log_file);
lstrcat(g_log_file,"install.log"); lstrcat(g_log_file,"install.log");
} }
#endif #endif
@ -259,7 +258,7 @@ int ui_doinstall(void)
} }
// p is the path now, check for .exe extension // p is the path now, check for .exe extension
e=p+lstrlen(p)-4; e=p+mystrlen(p)-4;
if (e > p) if (e > p)
{ {
// if filename ends in .exe, and is not a directory, remove the filename // if filename ends in .exe, and is not a directory, remove the filename
@ -275,7 +274,7 @@ int ui_doinstall(void)
} }
} }
lstrcpy(state_install_directory,p); mystrcpy(state_install_directory,p);
} }
} }
} }
@ -296,7 +295,6 @@ int ui_doinstall(void)
{ {
// Added by Amir Szekely 3rd August 2002 // Added by Amir Szekely 3rd August 2002
// Multilingual support // Multilingual support
char pa=0;
int num=g_inst_header->common.str_tables_num; int num=g_inst_header->common.str_tables_num;
LANGID user_lang=GetUserDefaultLangID(), lang_mask=~(LANGID)0; LANGID user_lang=GetUserDefaultLangID(), lang_mask=~(LANGID)0;
int size=num*sizeof(common_strings); int size=num*sizeof(common_strings);
@ -320,13 +318,11 @@ lang_again:
else else
#endif #endif
(installer_strings *)cur_install_strings_table+=size; (installer_strings *)cur_install_strings_table+=size;
pa++;
break; break;
} }
} }
if (!pa) { if ((size < num) && (lang_mask == ~(LANGID)0)) {
lang_mask=0x3ff; // primary lang lang_mask=0x3ff; // primary lang
pa++;
goto lang_again; goto lang_again;
} }
} }
@ -441,19 +437,19 @@ static BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
if (g_is_uninstaller) if (g_is_uninstaller)
{ {
islp=LANG_UNINST_TEXT>=0; islp = (LANG_UNINST_TEXT>=0);
iscp++; iscp++;
} }
else else
#endif//NSIS_CONFIG_UNINSTALL_SUPPORT #endif//NSIS_CONFIG_UNINSTALL_SUPPORT
{ {
#ifdef NSIS_CONFIG_LICENSEPAGE #ifdef NSIS_CONFIG_LICENSEPAGE
if (LANG_LICENSE_DATA>=0) islp++; islp = (LANG_LICENSE_DATA>=0);
#endif//NSIS_CONFIG_LICENSEPAGE #endif//NSIS_CONFIG_LICENSEPAGE
#ifdef NSIS_CONFIG_COMPONENTPAGE #ifdef NSIS_CONFIG_COMPONENTPAGE
if (LANG_COMP_TEXT>=0) iscp++; iscp = (LANG_COMP_TEXT>=0);
#endif//NSIS_CONFIG_COMPONENTPAGE #endif//NSIS_CONFIG_COMPONENTPAGE
if (LANG_DIR_TEXT>=0) ispotentiallydp++; ispotentiallydp = (LANG_DIR_TEXT>=0);
if (ispotentiallydp && if (ispotentiallydp &&
!((g_inst_cmnheader->misc_flags&2) && !((g_inst_cmnheader->misc_flags&2) &&
is_valid_instpath(state_install_directory) is_valid_instpath(state_install_directory)
@ -512,8 +508,8 @@ static BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
(m_page == 2 || (m_page == 1 && !isdp)) ? LANGID_BTN_INSTALL : (m_page == 2 || (m_page == 1 && !isdp)) ? LANGID_BTN_INSTALL :
LANGID_BTN_NEXT LANGID_BTN_NEXT
); );
lstrcpy(g_tmp,g_caption); mystrcpy(g_tmp,g_caption);
process_string_from_lang(g_tmp+lstrlen(g_tmp),LANGID_SUBCAPTION(m_page)); process_string_from_lang(g_tmp+mystrlen(g_tmp),LANGID_SUBCAPTION(m_page));
SetWindowText(hwndDlg,g_tmp); SetWindowText(hwndDlg,g_tmp);
@ -647,7 +643,7 @@ static BOOL CALLBACK UninstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
static void inttosizestr(int kb, char *str) static void inttosizestr(int kb, char *str)
{ {
while (*str) str++; str += mystrlen(str);
if (kb < 1024) wsprintf(str,"%dKB",kb); if (kb < 1024) wsprintf(str,"%dKB",kb);
else if (kb < 1024*1024) wsprintf(str,"%d.%dMB",kb>>10,((kb*10)>>10)%10); else if (kb < 1024*1024) wsprintf(str,"%d.%dMB",kb>>10,((kb*10)>>10)%10);
else wsprintf(str,"%d.%dGB%s",kb>>20,((kb*10)>>20)%10,(GetVersion()&0x80000000) ? "+":""); else wsprintf(str,"%d.%dGB%s",kb>>20,((kb*10)>>20)%10,(GetVersion()&0x80000000) ? "+":"");
@ -722,7 +718,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
if (p >= post_str && *++p) if (p >= post_str && *++p)
{ {
post_str=p; post_str=p;
p=name+lstrlen(name)-lstrlen(post_str); p=name+mystrlen(name)-mystrlen(post_str);
if (p <= name || *CharPrev(name,p)!='\\' || lstrcmpi(p,post_str)) if (p <= name || *CharPrev(name,p)!='\\' || lstrcmpi(p,post_str))
{ {
addtrailingslash(name); addtrailingslash(name);
@ -773,13 +769,11 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
// Added by Amir Szekely 24th July 2002 // Added by Amir Szekely 24th July 2002
// Allows 'SpaceTexts none' // Allows 'SpaceTexts none'
if (LANG_SPACE_REQ >= 0) { if (LANG_SPACE_REQ >= 0) {
lstrcpy(s,STR(LANG_SPACE_REQ)); inttosizestr(total,mystrcpy(s,STR(LANG_SPACE_REQ)));
inttosizestr(total,s);
SetUITextNT(hwndDlg,IDC_SPACEREQUIRED,g_inst_header->space_req_id,s); SetUITextNT(hwndDlg,IDC_SPACEREQUIRED,g_inst_header->space_req_id,s);
if (available != -1) if (available != -1)
{ {
lstrcpy(s,STR(LANG_SPACE_AVAIL)); inttosizestr(available,mystrcpy(s,STR(LANG_SPACE_AVAIL)));
inttosizestr(available,s);
SetUITextNT(hwndDlg,IDC_SPACEAVAILABLE,g_inst_header->space_avail_id,s); SetUITextNT(hwndDlg,IDC_SPACEAVAILABLE,g_inst_header->space_avail_id,s);
} }
else else
@ -1124,8 +1118,7 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
if (g_inst_section[x].default_state&DFS_SET) if (g_inst_section[x].default_state&DFS_SET)
total+=g_inst_section[x].size_kb; total+=g_inst_section[x].size_kb;
} }
lstrcpy(s,STR(LANG_SPACE_REQ)); inttosizestr(total,mystrcpy(s,STR(LANG_SPACE_REQ)));
inttosizestr(total,s);
SetUITextNT(hwndDlg,IDC_SPACEREQUIRED,g_inst_header->space_req_id,s); SetUITextNT(hwndDlg,IDC_SPACEREQUIRED,g_inst_header->space_req_id,s);
} }
} }
@ -1148,7 +1141,7 @@ void update_status_text(const char *text1, const char *text2)
RECT r; RECT r;
if (insthwnd) if (insthwnd)
{ {
if (lstrlen(text1)+lstrlen(text2) >= sizeof(ps_tmpbuf)) return; if (mystrlen(text1)+mystrlen(text2) >= sizeof(ps_tmpbuf)) return;
wsprintf(ps_tmpbuf,"%s%s",text1,text2); wsprintf(ps_tmpbuf,"%s%s",text1,text2);
if ((ui_st_updateflag&1)) if ((ui_st_updateflag&1))
{ {
@ -1281,8 +1274,8 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
if (!g_autoclose) if (!g_autoclose)
{ {
ShowWindow(g_hwnd,SW_SHOWNA); ShowWindow(g_hwnd,SW_SHOWNA);
lstrcpy(g_tmp,g_caption); mystrcpy(g_tmp,g_caption);
process_string_from_lang(g_tmp+lstrlen(g_caption),LANGID_SUBCAPTION(g_max_page+1)); process_string_from_lang(g_tmp+mystrlen(g_tmp),LANGID_SUBCAPTION(g_max_page+1));
update_status_text_from_lang(LANGID_COMPLETED,""); update_status_text_from_lang(LANGID_COMPLETED,"");
SetWindowText(g_hwnd,g_tmp); SetWindowText(g_hwnd,g_tmp);
SetFocus(h); SetFocus(h);

View file

@ -62,6 +62,7 @@ static LONG myRegDeleteKeyEx(HKEY thiskey, LPCTSTR lpSubKey, int onlyifempty)
int retval=RegOpenKeyEx(thiskey,lpSubKey,0,KEY_ALL_ACCESS,&key); int retval=RegOpenKeyEx(thiskey,lpSubKey,0,KEY_ALL_ACCESS,&key);
if (retval==ERROR_SUCCESS) if (retval==ERROR_SUCCESS)
{ {
// NB - don't change this to static (recursive function)
char buffer[MAX_PATH+1]; char buffer[MAX_PATH+1];
while (RegEnumKey(key,0,buffer,MAX_PATH+1)==ERROR_SUCCESS) while (RegEnumKey(key,0,buffer,MAX_PATH+1)==ERROR_SUCCESS)
{ {
@ -113,7 +114,7 @@ int ExecuteCodeSegment(entry *entries, int pos, HWND hwndProgress)
{ {
extern int progress_bar_pos, progress_bar_len; extern int progress_bar_pos, progress_bar_len;
progress_bar_pos+=rv; progress_bar_pos+=rv;
if (!progress_bar_len) progress_bar_len++; progress_bar_len+=(!progress_bar_len);
SendMessage(hwndProgress,PBM_SETPOS,MulDiv(progress_bar_pos,30000,progress_bar_len),0); SendMessage(hwndProgress,PBM_SETPOS,MulDiv(progress_bar_pos,30000,progress_bar_len),0);
} }
} }
@ -201,7 +202,7 @@ static int ExecuteEntry(entry *entries, int pos)
if (parms[1]) if (parms[1])
{ {
update_status_text_from_lang(LANGID_OUTPUTDIR,buf2); update_status_text_from_lang(LANGID_OUTPUTDIR,buf2);
lstrcpy(state_output_directory,buf2); mystrcpy(state_output_directory,buf2);
} }
else update_status_text_from_lang(LANGID_CREATEDIR,buf2); else update_status_text_from_lang(LANGID_CREATEDIR,buf2);
recursive_create_directory(buf2); recursive_create_directory(buf2);
@ -230,8 +231,8 @@ static int ExecuteEntry(entry *entries, int pos)
{ {
process_string_fromtab(buf,parms[0]); process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf2,parms[1]); process_string_fromtab(buf2,parms[1]);
lstrcpy(buf4,buf); mystrcpy(buf4,buf);
if (lstrlen(buf)+lstrlen(buf2) < NSIS_MAX_STRLEN-3) if (mystrlen(buf)+mystrlen(buf2) < NSIS_MAX_STRLEN-3)
{ {
lstrcat(buf4,"->"); lstrcat(buf4,"->");
lstrcat(buf4,buf2); lstrcat(buf4,buf2);
@ -279,7 +280,7 @@ static int ExecuteEntry(entry *entries, int pos)
WIN32_FIND_DATA *fd=file_exists(buf); WIN32_FIND_DATA *fd=file_exists(buf);
if (fd) if (fd)
{ {
lstrcpy(fp,fd->cFileName); mystrcpy(fp,fd->cFileName);
} }
else else
{ {
@ -319,14 +320,13 @@ static int ExecuteEntry(entry *entries, int pos)
HANDLE hOut; HANDLE hOut;
int ret; int ret;
int overwriteflag=parms[0]; int overwriteflag=parms[0];
lstrcpy(buf,state_output_directory); addtrailingslash(mystrcpy(buf,state_output_directory));
addtrailingslash(buf);
process_string_fromtab(buf4,parms[1]); process_string_fromtab(buf4,parms[1]);
log_printf3("File: overwriteflag=%d, name=\"%s\"",overwriteflag,buf4); log_printf3("File: overwriteflag=%d, name=\"%s\"",overwriteflag,buf4);
if (validpathspec(buf4)) if (validpathspec(buf4))
{ {
lstrcpy(buf,buf4); mystrcpy(buf,buf4);
} }
else lstrcat(buf,buf4); else lstrcat(buf,buf4);
_tryagain: _tryagain:
@ -356,11 +356,11 @@ static int ExecuteEntry(entry *entries, int pos)
return 0; return 0;
} }
log_printf2("File: error creating \"%s\"",buf); log_printf2("File: error creating \"%s\"",buf);
lstrcpy(buf3,g_usrvars[0]);//save $0 mystrcpy(buf3,g_usrvars[0]);//save $0
lstrcpy(g_usrvars[0],buf); mystrcpy(g_usrvars[0],buf);
process_string_from_lang(buf2,LANGID_FILEERR); process_string_from_lang(buf2,LANGID_FILEERR);
lstrcpy(g_usrvars[0],buf3); // restore $0 mystrcpy(g_usrvars[0],buf3); // restore $0
switch (my_MessageBox(buf2,MB_ABORTRETRYIGNORE|MB_ICONSTOP)) switch (my_MessageBox(buf2,MB_ABORTRETRYIGNORE|MB_ICONSTOP))
{ {
@ -396,7 +396,7 @@ static int ExecuteEntry(entry *entries, int pos)
} }
else else
{ {
lstrcpy(buf,STR(LANG_ERRORDECOMPRESSING)); mystrcpy(buf,STR(LANG_ERRORDECOMPRESSING));
} }
log_printf2("%s",buf); log_printf2("%s",buf);
my_MessageBox(buf,MB_OK|MB_ICONSTOP); my_MessageBox(buf,MB_OK|MB_ICONSTOP);
@ -411,7 +411,7 @@ static int ExecuteEntry(entry *entries, int pos)
HANDLE h; HANDLE h;
WIN32_FIND_DATA fd; WIN32_FIND_DATA fd;
process_string_fromtab(buf2,parms[0]); process_string_fromtab(buf2,parms[0]);
lstrcpy(buf,buf2); mystrcpy(buf,buf2);
log_printf2("Delete: \"%s\"",buf); log_printf2("Delete: \"%s\"",buf);
trimslashtoend(buf); trimslashtoend(buf);
h=FindFirstFile(buf2,&fd); h=FindFirstFile(buf2,&fd);
@ -492,7 +492,7 @@ static int ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_SUPPORT_STROPTS #ifdef NSIS_SUPPORT_STROPTS
case EW_STRLEN: case EW_STRLEN:
process_string_fromtab(buf,parms[1]); process_string_fromtab(buf,parms[1]);
myitoa(g_usrvars[parms[0]],lstrlen(buf)); myitoa(g_usrvars[parms[0]],mystrlen(buf));
return 0; return 0;
case EW_ASSIGNVAR: case EW_ASSIGNVAR:
{ {
@ -504,16 +504,16 @@ static int ExecuteEntry(entry *entries, int pos)
*p=0; *p=0;
if (parms[2] < 0 || newlen) if (parms[2] < 0 || newlen)
{ {
l=lstrlen(buf); l=mystrlen(buf);
if (start<0) start=l+start; if (start<0) start=l+start;
if (start>=0) if (start>=0)
{ {
if (start>l) start=l; if (start>l) start=l;
lstrcpy(p,buf+start); mystrcpy(p,buf+start);
if (newlen) if (newlen)
{ {
if (newlen<0) newlen=lstrlen(p)+newlen; if (newlen<0) newlen=mystrlen(p)+newlen;
if (newlen<0) newlen=0; if (newlen<0) newlen=0;
if (newlen < NSIS_MAX_STRLEN) p[newlen]=0; if (newlen < NSIS_MAX_STRLEN) p[newlen]=0;
} }
@ -611,9 +611,9 @@ static int ExecuteEntry(entry *entries, int pos)
log_printf2("Exch: stack < %d elements",parms[2]); log_printf2("Exch: stack < %d elements",parms[2]);
break; break;
} }
lstrcpy(buf,s->text); mystrcpy(buf,s->text);
lstrcpy(s->text,g_st->text); mystrcpy(s->text,g_st->text);
lstrcpy(g_st->text,buf); mystrcpy(g_st->text,buf);
} }
else if (parms[1]) else if (parms[1])
{ {
@ -623,7 +623,7 @@ static int ExecuteEntry(entry *entries, int pos)
exec_errorflag++; exec_errorflag++;
return 0; return 0;
} }
lstrcpy(g_usrvars[parms[0]],s->text); mystrcpy(g_usrvars[parms[0]],s->text);
g_st=s->next; g_st=s->next;
GlobalFree((HGLOBAL)s); GlobalFree((HGLOBAL)s);
} }
@ -870,8 +870,8 @@ static int ExecuteEntry(entry *entries, int pos)
log_printf3("CopyFiles \"%s\"->\"%s\"",buf,buf2); log_printf3("CopyFiles \"%s\"->\"%s\"",buf,buf2);
op.hwnd=g_hwnd; op.hwnd=g_hwnd;
op.wFunc=FO_COPY; op.wFunc=FO_COPY;
buf[lstrlen(buf)+1]=0; buf[mystrlen(buf)+1]=0;
buf2[lstrlen(buf2)+1]=0; buf2[mystrlen(buf2)+1]=0;
wsprintf(buf3,"%s%s",STR(LANG_COPYTO),buf2); wsprintf(buf3,"%s%s",STR(LANG_COPYTO),buf2);
@ -933,8 +933,8 @@ static int ExecuteEntry(entry *entries, int pos)
char *sec, *ent; char *sec, *ent;
sec=ent=0; sec=ent=0;
#ifdef NSIS_CONFIG_LOG #ifdef NSIS_CONFIG_LOG
lstrcpy(buf2,"<RM>"); mystrcpy(buf2,"<RM>");
lstrcpy(buf3,buf2); mystrcpy(buf3,buf2);
#endif #endif
process_string_fromtab(buf,parms[0]); process_string_fromtab(buf,parms[0]);
if (parms[1]>=0) if (parms[1]>=0)
@ -1005,7 +1005,7 @@ static int ExecuteEntry(entry *entries, int pos)
if (type <= 1) if (type <= 1)
{ {
process_string_fromtab(buf3,parms[3]); process_string_fromtab(buf3,parms[3]);
if (RegSetValueEx(hKey,buf2,0,type==1?REG_SZ:REG_EXPAND_SZ,buf3,lstrlen(buf3)+1) == ERROR_SUCCESS) exec_errorflag--; if (RegSetValueEx(hKey,buf2,0,type==1?REG_SZ:REG_EXPAND_SZ,buf3,mystrlen(buf3)+1) == ERROR_SUCCESS) exec_errorflag--;
log_printf5("WriteRegStr: set %d\\%s\\%s to %s",rootkey,buf4,buf2,buf3); log_printf5("WriteRegStr: set %d\\%s\\%s to %s",rootkey,buf4,buf2,buf3);
} }
else if (type == 2) else if (type == 2)
@ -1120,7 +1120,7 @@ static int ExecuteEntry(entry *entries, int pos)
else else
{ {
process_string_fromtab(buf2,parms[1]); process_string_fromtab(buf2,parms[1]);
l=lstrlen(buf2); l=mystrlen(buf2);
} }
if (!*t || !WriteFile((HANDLE)myatoi(t),buf2,l,&dw,NULL)) if (!*t || !WriteFile((HANDLE)myatoi(t),buf2,l,&dw,NULL))
{ {
@ -1195,7 +1195,7 @@ static int ExecuteEntry(entry *entries, int pos)
WIN32_FIND_DATA fd; WIN32_FIND_DATA fd;
if (*t && FindNextFile((HANDLE)myatoi(t),&fd)) if (*t && FindNextFile((HANDLE)myatoi(t),&fd))
{ {
lstrcpy(textout,fd.cFileName); mystrcpy(textout,fd.cFileName);
} }
else else
{ {
@ -1222,7 +1222,7 @@ static int ExecuteEntry(entry *entries, int pos)
else else
{ {
myitoa(handleout,(int)h); myitoa(handleout,(int)h);
lstrcpy(textout,fd.cFileName); mystrcpy(textout,fd.cFileName);
} }
} }
return 0; return 0;
@ -1236,12 +1236,11 @@ static int ExecuteEntry(entry *entries, int pos)
if (validpathspec(buf)) if (validpathspec(buf))
{ {
lstrcpy(buf2,buf); mystrcpy(buf2,buf);
} }
else else
{ {
lstrcpy(buf2,state_install_directory); addtrailingslash(mystrcpy(buf2,state_install_directory));
addtrailingslash(buf2);
lstrcat(buf2,buf); lstrcat(buf2,buf);
} }
@ -1384,7 +1383,7 @@ static int ExecuteEntry(entry *entries, int pos)
case EW_PLUGINCOMMANDPREP: case EW_PLUGINCOMMANDPREP:
// parms[0] = dll name // parms[0] = dll name
if (!*plugins_temp_dir) lstrcpy(plugins_temp_dir,g_usrvars[0]); if (!*plugins_temp_dir) mystrcpy(plugins_temp_dir,g_usrvars[0]);
return 0; return 0;
#endif // NSIS_CONFIG_PLUGIN_SUPPORT #endif // NSIS_CONFIG_PLUGIN_SUPPORT
} }

View file

@ -39,7 +39,7 @@ void doRMDir(char *buf, int recurse)
{ {
if (recurse && is_valid_instpath(buf)) if (recurse && is_valid_instpath(buf))
{ {
int i=lstrlen(buf); int i=mystrlen(buf);
HANDLE h; HANDLE h;
WIN32_FIND_DATA fd; WIN32_FIND_DATA fd;
lstrcat(buf,"\\*.*"); lstrcat(buf,"\\*.*");
@ -51,7 +51,7 @@ void doRMDir(char *buf, int recurse)
if (fd.cFileName[0] != '.' || if (fd.cFileName[0] != '.' ||
(fd.cFileName[1] != '.' && fd.cFileName[1])) (fd.cFileName[1] != '.' && fd.cFileName[1]))
{ {
lstrcpy(buf+i+1,fd.cFileName); mystrcpy(buf+i+1,fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) doRMDir(buf,recurse); if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) doRMDir(buf,recurse);
else else
{ {
@ -79,7 +79,7 @@ void addtrailingslash(char *str)
char lastchar(const char *str) char lastchar(const char *str)
{ {
return *CharPrev(str,str+lstrlen(str)); return *CharPrev(str,str+mystrlen(str));
} }
void trimslashtoend(char *buf) void trimslashtoend(char *buf)
@ -92,7 +92,7 @@ void trimslashtoend(char *buf)
char *scanendslash(const char *str) char *scanendslash(const char *str)
{ {
char *s=CharPrev(str,str+lstrlen(str)); char *s=CharPrev(str,str+mystrlen(str));
if (!*str) return (char*)str-1; if (!*str) return (char*)str-1;
for (;;) for (;;)
{ {
@ -145,8 +145,8 @@ int is_valid_instpath(char *s)
static char *findinmem(char *a, char *b, int len_of_a) static char *findinmem(char *a, char *b, int len_of_a)
{ {
if (len_of_a<0) len_of_a=lstrlen(a); if (len_of_a<0) len_of_a=mystrlen(a);
len_of_a -= lstrlen(b); len_of_a -= mystrlen(b);
while (*a && len_of_a >= 0) while (*a && len_of_a >= 0)
{ {
char *t=a,*u=b; char *t=a,*u=b;
@ -235,7 +235,7 @@ BOOL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
LPSTR pszRenameSecInFile = findinmem(pszWinInit, szRenameSec,-1); LPSTR pszRenameSecInFile = findinmem(pszWinInit, szRenameSec,-1);
if (pszRenameSecInFile == NULL) if (pszRenameSecInFile == NULL)
{ {
lstrcpy(pszWinInit+dwFileSize, szRenameSec); mystrcpy(pszWinInit+dwFileSize, szRenameSec);
dwFileSize += 10; dwFileSize += 10;
dwRenameLinePos = dwFileSize; dwRenameLinePos = dwFileSize;
do_write++; do_write++;
@ -369,6 +369,7 @@ int GetLangString(langid_t id)
} }
void myitoa(char *s, int d) { wsprintf(s,"%d",d); } void myitoa(char *s, int d) { wsprintf(s,"%d",d); }
int myatoi(char *s) int myatoi(char *s)
{ {
unsigned int v=0; unsigned int v=0;
@ -414,6 +415,19 @@ int myatoi(char *s)
return (int)v; return (int)v;
} }
// Straight copies of selected shell functions. Calling local functions
// requires less code than DLL functions. For the savings to outweigh the cost
// of a new function there should be about a couple of dozen or so calls.
char *mystrcpy(char *out, const char *in)
{
return lstrcpy(out, in);
}
int mystrlen(const char *in)
{
return lstrlen(in);
}
int process_string_fromtab_toint(int offs) int process_string_fromtab_toint(int offs)
{ {
@ -468,13 +482,13 @@ void process_string(char *out, const char *in)
case VAR_CODES_START + 22: // INSTDIR case VAR_CODES_START + 22: // INSTDIR
case VAR_CODES_START + 23: // OUTDIR case VAR_CODES_START + 23: // OUTDIR
case VAR_CODES_START + 24: // EXEDIR case VAR_CODES_START + 24: // EXEDIR
lstrcpy(out, g_usrvars[nVarIdx - (VAR_CODES_START + 1)]); mystrcpy(out, g_usrvars[nVarIdx - (VAR_CODES_START + 1)]);
break; break;
case VAR_CODES_START + 25: // PROGRAMFILES case VAR_CODES_START + 25: // PROGRAMFILES
myRegGetStr(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", "ProgramFilesDir", out); myRegGetStr(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", "ProgramFilesDir", out);
if (!*out) if (!*out)
lstrcpy(out, "C:\\Program Files"); mystrcpy(out, "C:\\Program Files");
break; break;
case VAR_CODES_START + 26: // SMPROGRAMS case VAR_CODES_START + 26: // SMPROGRAMS
@ -516,7 +530,7 @@ void process_string(char *out, const char *in)
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT #ifdef NSIS_CONFIG_PLUGIN_SUPPORT
case VAR_CODES_START + 35: // PLUGINSDIR case VAR_CODES_START + 35: // PLUGINSDIR
lstrcpy(out, plugins_temp_dir); mystrcpy(out, plugins_temp_dir);
break; break;
#if VAR_CODES_START + 35 >= 255 #if VAR_CODES_START + 35 >= 255
@ -558,7 +572,7 @@ void log_write(int close)
{ {
if (g_log_file[0] && fp==INVALID_HANDLE_VALUE) if (g_log_file[0] && fp==INVALID_HANDLE_VALUE)
{ {
fp = CreateFile(g_log_file,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,0,NULL); fp = myOpenFile(g_log_file,GENERIC_WRITE,OPEN_ALWAYS);
if (fp!=INVALID_HANDLE_VALUE) if (fp!=INVALID_HANDLE_VALUE)
SetFilePointer(fp,0,NULL,FILE_END); SetFilePointer(fp,0,NULL,FILE_END);
} }
@ -566,7 +580,7 @@ void log_write(int close)
{ {
DWORD d; DWORD d;
lstrcat(log_text,"\r\n"); lstrcat(log_text,"\r\n");
WriteFile(fp,log_text,lstrlen(log_text),&d,NULL); WriteFile(fp,log_text,mystrlen(log_text),&d,NULL);
} }
} }
} }

View file

@ -12,6 +12,8 @@ int process_string_fromtab_toint(int offs);
void myRegGetStr(HKEY root, const char *sub, const char *name, char *out); void myRegGetStr(HKEY root, const char *sub, const char *name, char *out);
int myatoi(char *s); int myatoi(char *s);
void myitoa(char *s, int d); void myitoa(char *s, int d);
char *mystrcpy(char *out, const char *in);
int mystrlen(const char *in);
#ifdef NSIS_CONFIG_LOG #ifdef NSIS_CONFIG_LOG
extern char log_text[NSIS_MAX_STRLEN*4]; extern char log_text[NSIS_MAX_STRLEN*4];