Jim Park's Unicode NSIS merging - Step 1 : switch to TCHARs where relevant.
Compiler output is identical before & after this step git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/branches/wizou@6036 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
4e48722b63
commit
752d7d239a
209 changed files with 9698 additions and 7658 deletions
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/22/2007
|
||||
*/
|
||||
|
||||
#include "../Platform.h"
|
||||
|
@ -34,7 +36,7 @@
|
|||
extern HANDLE dbd_hFile;
|
||||
#endif
|
||||
|
||||
char g_caption[NSIS_MAX_STRLEN*2];
|
||||
TCHAR g_caption[NSIS_MAX_STRLEN*2];
|
||||
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
HWND g_hwnd;
|
||||
HANDLE g_hInstance;
|
||||
|
@ -42,7 +44,7 @@ HANDLE g_hInstance;
|
|||
|
||||
void NSISCALL CleanUp();
|
||||
|
||||
char *ValidateTempDir()
|
||||
TCHAR *ValidateTempDir()
|
||||
{
|
||||
validate_filename(state_temp_dir);
|
||||
if (!validpathspec(state_temp_dir))
|
||||
|
@ -55,16 +57,16 @@ char *ValidateTempDir()
|
|||
|
||||
void *g_SHGetFolderPath;
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, int nCmdShow)
|
||||
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPTSTR lpszCmdParam, int nCmdShow)
|
||||
{
|
||||
int ret = 0;
|
||||
const char *m_Err = _LANG_ERRORWRITINGTEMP;
|
||||
const TCHAR *m_Err = _LANG_ERRORWRITINGTEMP;
|
||||
|
||||
int cl_flags = 0;
|
||||
|
||||
char *realcmds;
|
||||
char seekchar=' ';
|
||||
char *cmdline;
|
||||
TCHAR *realcmds;
|
||||
TCHAR seekchar=_T(' ');
|
||||
TCHAR *cmdline;
|
||||
|
||||
InitCommonControls();
|
||||
|
||||
|
@ -88,7 +90,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
// Delete $PROGRAMFILES\shfolder.dll # can't be deleted, as the
|
||||
// # new shfolder.dll is used
|
||||
// # to find its own path.
|
||||
g_SHGetFolderPath = myGetProcAddress(MGA_SHGetFolderPathA);
|
||||
g_SHGetFolderPath = myGetProcAddress(MGA_SHGetFolderPath);
|
||||
|
||||
{
|
||||
// workaround for bug #1008632
|
||||
|
@ -108,7 +110,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
// of special folders (CSIDL_*).
|
||||
|
||||
SHFILEINFO shfi;
|
||||
SHGetFileInfo("", 0, &shfi, sizeof(SHFILEINFO), 0);
|
||||
SHGetFileInfo(_T(""), 0, &shfi, sizeof(SHFILEINFO), 0);
|
||||
}
|
||||
|
||||
mystrcpy(g_caption,_LANG_GENERIC_ERROR);
|
||||
|
@ -120,7 +122,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
#endif//NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
|
||||
cmdline = state_command_line;
|
||||
if (*cmdline == '\"') seekchar = *cmdline++;
|
||||
if (*cmdline == _T('\"')) seekchar = *cmdline++;
|
||||
|
||||
cmdline=findchar(cmdline, seekchar);
|
||||
cmdline=CharNext(cmdline);
|
||||
|
@ -129,34 +131,34 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
while (*cmdline)
|
||||
{
|
||||
// skip over any spaces
|
||||
while (*cmdline == ' ') cmdline++;
|
||||
while (*cmdline == _T(' ')) cmdline++;
|
||||
|
||||
// get char we should look for to get the next parm
|
||||
seekchar = ' ';
|
||||
if (cmdline[0] == '\"')
|
||||
seekchar = _T(' ');
|
||||
if (cmdline[0] == _T('\"'))
|
||||
{
|
||||
cmdline++;
|
||||
seekchar = '\"';
|
||||
seekchar = _T('\"');
|
||||
}
|
||||
|
||||
// is it a switch?
|
||||
if (cmdline[0] == '/')
|
||||
if (cmdline[0] == _T('/'))
|
||||
{
|
||||
cmdline++;
|
||||
|
||||
// this only works with spaces because they have just one bit on
|
||||
#define END_OF_ARG(c) (((c)|' ')==' ')
|
||||
#define END_OF_ARG(c) (((c)|_T(' '))==_T(' '))
|
||||
|
||||
#if defined(NSIS_CONFIG_VISIBLE_SUPPORT) && defined(NSIS_CONFIG_SILENT_SUPPORT)
|
||||
if (cmdline[0] == 'S' && END_OF_ARG(cmdline[1]))
|
||||
if (cmdline[0] == _T('S') && END_OF_ARG(cmdline[1]))
|
||||
cl_flags |= FH_FLAGS_SILENT;
|
||||
#endif//NSIS_CONFIG_SILENT_SUPPORT && NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
#ifdef NSIS_CONFIG_CRC_SUPPORT
|
||||
if (*(LPDWORD)cmdline == CHAR4_TO_DWORD('N','C','R','C') && END_OF_ARG(cmdline[4]))
|
||||
if (*(LPDWORD)cmdline == CHAR4_TO_DWORD(_T('N'),_T('C'),_T('R'),_T('C')) && END_OF_ARG(cmdline[4]))
|
||||
cl_flags |= FH_FLAGS_NO_CRC;
|
||||
#endif//NSIS_CONFIG_CRC_SUPPORT
|
||||
|
||||
if (*(LPDWORD)(cmdline-2) == CHAR4_TO_DWORD(' ', '/', 'D','='))
|
||||
if (*(LPDWORD)(cmdline-2) == CHAR4_TO_DWORD(_T(' '), _T('/'), _T('D'),_T('=')))
|
||||
{
|
||||
*(LPDWORD)(cmdline-2)=0; // keep this from being passed to uninstaller if necessary
|
||||
mystrcpy(state_install_directory,cmdline+2);
|
||||
|
@ -167,7 +169,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
// skip over our parm
|
||||
cmdline = findchar(cmdline, seekchar);
|
||||
// skip the quote
|
||||
if (*cmdline == '\"')
|
||||
if (*cmdline == _T('\"'))
|
||||
cmdline++;
|
||||
}
|
||||
|
||||
|
@ -175,7 +177,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
if (!ValidateTempDir())
|
||||
{
|
||||
GetWindowsDirectory(state_temp_dir, NSIS_MAX_STRLEN - 5); // leave space for \Temp
|
||||
mystrcat(state_temp_dir, "\\Temp");
|
||||
mystrcat(state_temp_dir, _T("\\Temp"));
|
||||
if (!ValidateTempDir())
|
||||
{
|
||||
goto end;
|
||||
|
@ -189,11 +191,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
|
||||
if (g_is_uninstaller)
|
||||
{
|
||||
char *p = findchar(state_command_line, 0);
|
||||
TCHAR *p = findchar(state_command_line, 0);
|
||||
|
||||
// state_command_line has state_install_directory right after it in memory, so reading
|
||||
// a bit over state_command_line won't do any harm
|
||||
while (p >= state_command_line && *(LPDWORD)p != CHAR4_TO_DWORD(' ', '_', '?', '=')) p--;
|
||||
while (p >= state_command_line && *(LPDWORD)p != CHAR4_TO_DWORD(_T(' '), _T('_'), _T('?'), _T('='))) p--;
|
||||
|
||||
m_Err = _LANG_UNINSTINITERROR;
|
||||
|
||||
|
@ -216,7 +218,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
{
|
||||
int x;
|
||||
|
||||
mystrcat(state_temp_dir,"~nsu.tmp");
|
||||
mystrcat(state_temp_dir,_T("~nsu.tmp"));
|
||||
|
||||
// check if already running from uninstaller temp dir
|
||||
// this prevents recursive uninstaller calls
|
||||
|
@ -230,11 +232,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
mystrcpy(state_install_directory,state_exe_directory);
|
||||
|
||||
mystrcpy(g_usrvars[0], realcmds);
|
||||
*(LPWORD)g_usrvars[1] = CHAR2_TO_WORD('A',0);
|
||||
*(LPWORD)g_usrvars[1] = CHAR2_TO_WORD(_T('A'),0);
|
||||
|
||||
for (x = 0; x < 26; x ++)
|
||||
{
|
||||
static char buf2[NSIS_MAX_STRLEN];
|
||||
static TCHAR buf2[NSIS_MAX_STRLEN];
|
||||
|
||||
GetNSISString(buf2,g_header->str_uninstchild); // $TEMP\$1u_.exe
|
||||
|
||||
|
@ -301,7 +303,7 @@ end:
|
|||
BOOL (WINAPI *LPV)(LPCTSTR,LPCTSTR,PLUID);
|
||||
BOOL (WINAPI *ATP)(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
|
||||
OPT=myGetProcAddress(MGA_OpenProcessToken);
|
||||
LPV=myGetProcAddress(MGA_LookupPrivilegeValueA);
|
||||
LPV=myGetProcAddress(MGA_LookupPrivilegeValue);
|
||||
ATP=myGetProcAddress(MGA_AdjustTokenPrivileges);
|
||||
if (OPT && LPV && ATP)
|
||||
{
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/10/2007
|
||||
*/
|
||||
|
||||
#include <windowsx.h>
|
||||
|
@ -48,9 +50,9 @@ int g_quit_flag; // set when Quit has been called (meaning bail out ASAP)
|
|||
int progress_bar_pos, progress_bar_len;
|
||||
|
||||
#if NSIS_MAX_STRLEN < 1024
|
||||
static char g_tmp[4096];
|
||||
static TCHAR g_tmp[4096];
|
||||
#else
|
||||
static char g_tmp[NSIS_MAX_STRLEN * 4];
|
||||
static TCHAR g_tmp[NSIS_MAX_STRLEN * 4];
|
||||
#endif
|
||||
|
||||
static int m_page=-1,m_retcode,m_delta;
|
||||
|
@ -162,7 +164,7 @@ static BOOL NSISCALL _HandleStaticBkColor(UINT uMsg, WPARAM wParam, LPARAM lPara
|
|||
#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT)
|
||||
void NSISCALL build_g_logfile()
|
||||
{
|
||||
mystrcat(addtrailingslash(mystrcpy(g_log_file,state_install_directory)),"install.log");
|
||||
mystrcat(addtrailingslash(mystrcpy(g_log_file,state_install_directory)),_T("install.log"));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -177,6 +179,8 @@ static void NSISCALL set_language()
|
|||
int lang_num;
|
||||
int *selected_langtable=0;
|
||||
|
||||
// Jim Park: We are doing byte offsets to get to various data structures so
|
||||
// no TCHARs here.
|
||||
lang_again:
|
||||
lang_num=g_blocks[NB_LANGTABLES].num;
|
||||
while (lang_num--) {
|
||||
|
@ -200,7 +204,7 @@ lang_again:
|
|||
|
||||
myitoa(state_language, *(LANGID*)language_table);
|
||||
{
|
||||
char *caption = GetNSISString(g_caption,LANG_CAPTION);
|
||||
TCHAR *caption = GetNSISString(g_caption,LANG_CAPTION);
|
||||
#ifdef NSIS_SUPPORT_BGBG
|
||||
my_SetWindowText(m_bgwnd, caption);
|
||||
#endif
|
||||
|
@ -241,11 +245,11 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
static const char reg_9x_locale[] = "Control Panel\\Desktop\\ResourceLocale";
|
||||
static const char reg_nt_locale_key[] = ".DEFAULT\\Control Panel\\International";
|
||||
const char *reg_nt_locale_val = ®_9x_locale[30]; // = "Locale" with opt
|
||||
static const TCHAR reg_9x_locale[] = _T("Control Panel\\Desktop\\ResourceLocale");
|
||||
static const TCHAR reg_nt_locale_key[] = _T(".DEFAULT\\Control Panel\\International");
|
||||
const TCHAR *reg_nt_locale_val = ®_9x_locale[30]; // = _T("Locale") with opt
|
||||
|
||||
*(DWORD*)state_language = CHAR4_TO_DWORD('0', 'x', 0, 0);
|
||||
*(DWORD*)state_language = CHAR4_TO_DWORD(_T('0'), _T('x'), 0, 0);
|
||||
|
||||
{
|
||||
// Windows 9x
|
||||
|
@ -287,13 +291,13 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
|
|||
);
|
||||
if (ps_tmpbuf[0])
|
||||
{
|
||||
char *p=ps_tmpbuf;
|
||||
char *e;
|
||||
if (p[0]=='\"')
|
||||
TCHAR *p=ps_tmpbuf;
|
||||
TCHAR *e;
|
||||
if (p[0]==_T('\"'))
|
||||
{
|
||||
char *p2;
|
||||
TCHAR *p2;
|
||||
p++;
|
||||
p2 = findchar(p, '"');
|
||||
p2 = findchar(p, _T('"'));
|
||||
*p2 = 0;
|
||||
}
|
||||
// p is the path now, check for .exe extension
|
||||
|
@ -302,7 +306,7 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
|
|||
if (e > p)
|
||||
{
|
||||
// if filename ends in .exe, and is not a directory, remove the filename
|
||||
if (!lstrcmpi(e, ".exe")) // check extension
|
||||
if (!lstrcmpi(e, _T(".exe"))) // check extension
|
||||
{
|
||||
DWORD d;
|
||||
d=GetFileAttributes(p);
|
||||
|
@ -339,20 +343,20 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
|
|||
#ifdef NSIS_SUPPORT_BGBG
|
||||
if (header->bg_color1 != -1)
|
||||
{
|
||||
DWORD cn = CHAR4_TO_DWORD('_', 'N', 'b', 0);
|
||||
DWORD cn = CHAR4_TO_DWORD(_T('_'), _T('N'), _T('b'), 0);
|
||||
RECT vp;
|
||||
extern LRESULT CALLBACK BG_WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
wc.lpfnWndProc = BG_WndProc;
|
||||
wc.hInstance = g_hInstance;
|
||||
wc.hIcon = g_hIcon;
|
||||
//wc.hCursor = LoadCursor(NULL,IDC_ARROW);
|
||||
wc.lpszClassName = (LPCSTR)&cn;
|
||||
wc.lpszClassName = (LPCTSTR)&cn;
|
||||
|
||||
if (!RegisterClass(&wc)) return 0;
|
||||
|
||||
SystemParametersInfo(SPI_GETWORKAREA, 0, &vp, 0);
|
||||
|
||||
m_bgwnd = CreateWindowEx(WS_EX_TOOLWINDOW,(LPCSTR)&cn,0,WS_POPUP,
|
||||
m_bgwnd = CreateWindowEx(WS_EX_TOOLWINDOW,(LPCTSTR)&cn,0,WS_POPUP,
|
||||
vp.left,vp.top,vp.right-vp.left,vp.bottom-vp.top,0,NULL,g_hInstance,NULL);
|
||||
}
|
||||
|
||||
|
@ -378,10 +382,10 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
|
|||
|
||||
#ifdef NSIS_CONFIG_LICENSEPAGE
|
||||
{ // load richedit DLL
|
||||
static const char riched20[]="RichEd20";
|
||||
static const char riched32[]="RichEd32";
|
||||
static const char richedit20a[]="RichEdit20A";
|
||||
static const char richedit[]="RichEdit";
|
||||
static const TCHAR riched20[]=_T("RichEd20");
|
||||
static const TCHAR riched32[]=_T("RichEd32");
|
||||
static const TCHAR richedit20a[]=_T("RichEdit20A");
|
||||
static const TCHAR richedit[]=_T("RichEdit");
|
||||
if (!LoadLibrary(riched20))
|
||||
{
|
||||
LoadLibrary(riched32);
|
||||
|
@ -434,9 +438,10 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
|
|||
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
static int CALLBACK WINAPI BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
|
||||
{
|
||||
// lpData has the TCHAR* to 'dir'.
|
||||
if (uMsg==BFFM_INITIALIZED)
|
||||
{
|
||||
my_GetDialogItemText(IDC_DIR,(char*)lpData);
|
||||
my_GetDialogItemText(IDC_DIR,(TCHAR*)lpData);
|
||||
SendMessage(hwnd,BFFM_SETSELECTION,(WPARAM)1,lpData);
|
||||
}
|
||||
if (uMsg==BFFM_SELCHANGED)
|
||||
|
@ -445,7 +450,7 @@ static int CALLBACK WINAPI BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lPara
|
|||
hwnd,
|
||||
BFFM_ENABLEOK,
|
||||
0,
|
||||
SHGetPathFromIDList((LPITEMIDLIST)lParam,(char*)lpData)
|
||||
SHGetPathFromIDList((LPITEMIDLIST)lParam,(TCHAR*)lpData)
|
||||
#ifdef NSIS_SUPPORT_CODECALLBACKS
|
||||
&& !ExecuteCallbackFunction(CB_ONVERIFYINSTDIR)
|
||||
#endif
|
||||
|
@ -710,7 +715,7 @@ skipPage:
|
|||
static DWORD dwRead;
|
||||
DWORD CALLBACK StreamLicense(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
|
||||
{
|
||||
lstrcpyn(pbBuff,(char*)dwCookie+dwRead,cb);
|
||||
lstrcpyn(pbBuff,(TCHAR*)dwCookie+dwRead,cb);
|
||||
*pcb=mystrlen(pbBuff);
|
||||
dwRead+=*pcb;
|
||||
return 0;
|
||||
|
@ -724,7 +729,7 @@ static BOOL CALLBACK LicenseProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
|
|||
|
||||
if (uMsg == WM_INITDIALOG)
|
||||
{
|
||||
char *l = (char *)GetNSISStringNP(GetNSISTab(this_page->parms[1]));
|
||||
TCHAR *l = (TCHAR *)GetNSISStringNP(GetNSISTab(this_page->parms[1]));
|
||||
int lt = *l;
|
||||
EDITSTREAM es = {
|
||||
(DWORD)(++l),
|
||||
|
@ -778,7 +783,7 @@ static BOOL CALLBACK LicenseProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
|
|||
if (tr.chrg.cpMax-tr.chrg.cpMin < sizeof(ps_tmpbuf)) {
|
||||
SendMessage(hwLicense,EM_GETTEXTRANGE,0,(LPARAM)&tr);
|
||||
SetCursor(LoadCursor(0, IDC_WAIT));
|
||||
ShellExecute(hwndDlg,"open",tr.lpstrText,NULL,NULL,SW_SHOWNORMAL);
|
||||
ShellExecute(hwndDlg,_T("open"),tr.lpstrText,NULL,NULL,SW_SHOWNORMAL);
|
||||
SetCursor(LoadCursor(0, IDC_ARROW));
|
||||
}
|
||||
}
|
||||
|
@ -835,7 +840,7 @@ static BOOL CALLBACK UninstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
|
||||
static void NSISCALL SetSizeText(int dlgItem, int prefix, unsigned kb)
|
||||
{
|
||||
char scalestr[32], byte[32];
|
||||
TCHAR scalestr[32], byte[32];
|
||||
unsigned sh = 20;
|
||||
int scale = LANG_GIGA;
|
||||
|
||||
|
@ -853,7 +858,7 @@ static void NSISCALL SetSizeText(int dlgItem, int prefix, unsigned kb)
|
|||
wsprintf(
|
||||
g_tmp + mystrlen(g_tmp),
|
||||
#endif
|
||||
"%u.%u%s%s",
|
||||
_T("%u.%u%s%s"),
|
||||
kb >> sh,
|
||||
(((kb & 0x00FFFFFF) * 10) >> sh) % 10, // 0x00FFFFFF mask is used to
|
||||
// prevent overflow that causes
|
||||
|
@ -887,7 +892,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
{
|
||||
static int dontsetdefstyle;
|
||||
page *thispage = g_this_page;
|
||||
char *dir = g_usrvars[thispage->parms[4]];
|
||||
TCHAR *dir = g_usrvars[thispage->parms[4]];
|
||||
int browse_text = thispage->parms[3];
|
||||
if (uMsg == WM_NOTIFY_INIGO_MONTOYA)
|
||||
{
|
||||
|
@ -955,7 +960,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
}
|
||||
if (id == IDC_BROWSE)
|
||||
{
|
||||
static char bt[NSIS_MAX_STRLEN];
|
||||
static TCHAR bt[NSIS_MAX_STRLEN];
|
||||
BROWSEINFO bi = {0,};
|
||||
ITEMIDLIST *idlist;
|
||||
bi.hwndOwner = hwndDlg;
|
||||
|
@ -975,7 +980,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
if (g_header->install_directory_auto_append &&
|
||||
dir == state_install_directory) // only append to $INSTDIR (bug #1174184)
|
||||
{
|
||||
const char *post_str = ps_tmpbuf;
|
||||
const TCHAR *post_str = ps_tmpbuf;
|
||||
GetNSISStringTT(g_header->install_directory_auto_append);
|
||||
// display name gives just the folder name
|
||||
if (lstrcmpi(post_str, g_tmp))
|
||||
|
@ -995,7 +1000,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
}
|
||||
if (uMsg == WM_IN_UPDATEMSG || uMsg == WM_NOTIFY_START)
|
||||
{
|
||||
static char s[NSIS_MAX_STRLEN];
|
||||
static TCHAR s[NSIS_MAX_STRLEN];
|
||||
int error = 0;
|
||||
int available_set = 0;
|
||||
unsigned total, available;
|
||||
|
@ -1026,15 +1031,15 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
|
||||
// Test for and use the GetDiskFreeSpaceEx API
|
||||
{
|
||||
BOOL (WINAPI *GDFSE)(LPCSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER) =
|
||||
myGetProcAddress(MGA_GetDiskFreeSpaceExA);
|
||||
BOOL (WINAPI *GDFSE)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER) =
|
||||
myGetProcAddress(MGA_GetDiskFreeSpaceEx);
|
||||
if (GDFSE)
|
||||
{
|
||||
ULARGE_INTEGER available64;
|
||||
ULARGE_INTEGER a, b;
|
||||
char *p;
|
||||
TCHAR *p;
|
||||
WORD *pw = NULL;
|
||||
while ((char *) pw != s) // trimslashtoend() cut the entire string
|
||||
while ((TCHAR *) pw != s) // trimslashtoend() cut the entire string
|
||||
{
|
||||
if (GDFSE(s, &available64, &a, &b))
|
||||
{
|
||||
|
@ -1053,7 +1058,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
|
||||
p = trimslashtoend(s); // trim last backslash
|
||||
pw = (LPWORD) (p - 1);
|
||||
*pw = CHAR2_TO_WORD('\\', 0); // bring it back, but make the next char null
|
||||
*pw = CHAR2_TO_WORD(_T('\\'), 0); // bring it back, but make the next TCHAR null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1061,7 +1066,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
if (!available_set)
|
||||
{
|
||||
DWORD spc, bps, fc, tc;
|
||||
char *root;
|
||||
TCHAR *root;
|
||||
|
||||
// GetDiskFreeSpaceEx accepts any path, but GetDiskFreeSpace accepts only the root
|
||||
mystrcpy(s,dir);
|
||||
|
@ -1087,7 +1092,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
if (available_set)
|
||||
SetSizeText(IDC_SPACEAVAILABLE,LANG_SPACE_AVAIL,available);
|
||||
else
|
||||
SetUITextNT(IDC_SPACEAVAILABLE,"");
|
||||
SetUITextNT(IDC_SPACEAVAILABLE,_T(""));
|
||||
}
|
||||
|
||||
g_exec_flags.instdir_error = error;
|
||||
|
@ -1500,8 +1505,8 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
|
||||
#endif//NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
|
||||
void NSISCALL update_status_text(int strtab, const char *text) {
|
||||
static char tmp[NSIS_MAX_STRLEN*2];
|
||||
void NSISCALL update_status_text(int strtab, const TCHAR *text) {
|
||||
static TCHAR tmp[NSIS_MAX_STRLEN*2];
|
||||
LVITEM new_item;
|
||||
HWND linsthwnd = insthwnd;
|
||||
if (linsthwnd)
|
||||
|
@ -1567,7 +1572,7 @@ static DWORD WINAPI install_thread(LPVOID p)
|
|||
if (s->flags&SF_SELECTED)
|
||||
#endif
|
||||
{
|
||||
log_printf2("Section: \"%s\"",s->name);
|
||||
log_printf2(_T("Section: \"%s\""),s->name);
|
||||
if (ExecuteCodeSegment(s->code,progresswnd))
|
||||
{
|
||||
g_exec_flags.abort++;
|
||||
|
@ -1577,7 +1582,7 @@ static DWORD WINAPI install_thread(LPVOID p)
|
|||
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
||||
else
|
||||
{
|
||||
log_printf2("Skipping section: \"%s\"",s->name);
|
||||
log_printf2(_T("Skipping section: \"%s\""),s->name);
|
||||
}
|
||||
#endif
|
||||
s++;
|
||||
|
@ -1611,7 +1616,7 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
progress_bar_len=sumsecsfield(code_size);
|
||||
progress_bar_pos=0;
|
||||
|
||||
log_printf3("New install of \"%s\" to \"%s\"",GetNSISStringTT(LANG_NAME),state_install_directory);
|
||||
log_printf3(_T("New install of \"%s\" to \"%s\""),GetNSISStringTT(LANG_NAME),state_install_directory);
|
||||
|
||||
GetClientRect(linsthwnd, &r);
|
||||
lvc.cx = r.right - GetSystemMetrics(SM_CXHSCROLL);
|
||||
|
@ -1718,14 +1723,14 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
// Clipboard MSDN docs say mem must be GMEM_MOVEABLE
|
||||
OpenClipboard(0);
|
||||
EmptyClipboard();
|
||||
memory = GlobalAlloc(GHND,total);
|
||||
memory = GlobalAlloc(GHND,total*sizeof(TCHAR));
|
||||
ptr = GlobalLock(memory);
|
||||
//endPtr = ptr+total-2; // -2 to allow for CR/LF
|
||||
i = 0;
|
||||
do {
|
||||
item.pszText = ptr;
|
||||
ptr += SendMessage(linsthwnd,LVM_GETITEMTEXT,i,(LPARAM)&item);
|
||||
*(WORD*)ptr = CHAR2_TO_WORD('\r','\n');
|
||||
*(WORD*)ptr = CHAR2_TO_WORD(_T('\r'),_T('\n'));
|
||||
ptr+=2;
|
||||
} while (++i < count);
|
||||
// memory is auto zeroed when allocated with GHND - *ptr = 0;
|
||||
|
|
|
@ -64,7 +64,7 @@ typedef struct
|
|||
typedef struct {
|
||||
exec_flags_t *exec_flags;
|
||||
int (NSISCALL *ExecuteCodeSegment)(int, HWND);
|
||||
void (NSISCALL *validate_filename)(char *);
|
||||
void (NSISCALL *validate_filename)(TCHAR *);
|
||||
int (NSISCALL *RegisterPluginCallback)(HMODULE, NSISPLUGINCALLBACK); // returns 0 on success, 1 if already registered and < 0 on errors
|
||||
} extra_parameters;
|
||||
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Reviewed for Unicode support by Jim Park -- 08/22/2007
|
||||
*/
|
||||
|
||||
#include "../Platform.h"
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Reviewed for Unicode support by Jim Park -- 08/22/2007
|
||||
*/
|
||||
|
||||
#include "../Platform.h"
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
*
|
||||
* Reviewed for Unicode support by Jim Park -- 08/22/2007
|
||||
*/
|
||||
|
||||
#ifndef ___COMPONENTS_H___
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Reviewed for Unicode support by Jim Park -- 08/22/2007
|
||||
*/
|
||||
|
||||
#ifndef NSIS_CONFIG_H
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/13/2007
|
||||
*/
|
||||
|
||||
#include "../Platform.h"
|
||||
|
@ -27,6 +29,7 @@
|
|||
#include "lang.h"
|
||||
#include "resource.h"
|
||||
#include "api.h"
|
||||
#include "../tchar.h"
|
||||
|
||||
#define EXEC_ERROR 0x7FFFFFFF
|
||||
|
||||
|
@ -37,7 +40,7 @@ HWND g_SectionHack;
|
|||
#ifdef NSIS_SUPPORT_STACK
|
||||
typedef struct _stack_t {
|
||||
struct _stack_t *next;
|
||||
char text[NSIS_MAX_STRLEN];
|
||||
TCHAR text[NSIS_MAX_STRLEN];
|
||||
} stack_t;
|
||||
|
||||
static stack_t *g_st;
|
||||
|
@ -59,6 +62,11 @@ HRESULT g_hres;
|
|||
|
||||
static int NSISCALL ExecuteEntry(entry *entry_);
|
||||
|
||||
/**
|
||||
* If v is negative, then the address to resolve is actually
|
||||
* stored in the global user variables. Convert the value
|
||||
* to integer and return.
|
||||
*/
|
||||
int NSISCALL resolveaddr(int v)
|
||||
{
|
||||
if (v < 0)
|
||||
|
@ -107,7 +115,7 @@ int NSISCALL ExecuteCallbackFunction(int num)
|
|||
|
||||
#endif
|
||||
|
||||
static char bufs[5][NSIS_MAX_STRLEN];
|
||||
static TCHAR bufs[5][NSIS_MAX_STRLEN];
|
||||
static int *parms;
|
||||
|
||||
void NSISCALL update_status_text_buf1(int strtab)
|
||||
|
@ -123,10 +131,14 @@ static int NSISCALL GetIntFromParm(int id_)
|
|||
// NB - USE CAUTION when rearranging code to make use of the new return value of
|
||||
// this function - be sure the parm being accessed is not modified before the call.
|
||||
// Use a negative number to get the string validated as a file name
|
||||
static char * NSISCALL GetStringFromParm(int id_)
|
||||
// Note: Calling GetNSISString has the side effect that the buffer holding
|
||||
// the string to expand gets modified.
|
||||
// When calling this function with numbers like 0x13, it means create the string
|
||||
// from the string ID found in entry.offset[3] and put it into bufs[0].
|
||||
static TCHAR * NSISCALL GetStringFromParm(int id_)
|
||||
{
|
||||
int id = id_ < 0 ? -id_ : id_;
|
||||
char *result = GetNSISString(bufs[id >> 4], parms[id & 0xF]);
|
||||
TCHAR *result = GetNSISString(bufs[id >> 4], parms[id & 0xF]);
|
||||
if (id_ < 0) validate_filename(result);
|
||||
return result;
|
||||
}
|
||||
|
@ -145,7 +157,7 @@ static LONG NSISCALL myRegDeleteKeyEx(HKEY thiskey, LPCTSTR lpSubKey, int onlyif
|
|||
if (retval==ERROR_SUCCESS)
|
||||
{
|
||||
// NB - don't change this to static (recursive function)
|
||||
char buffer[MAX_PATH+1];
|
||||
TCHAR buffer[MAX_PATH+1];
|
||||
while (RegEnumKey(key,0,buffer,MAX_PATH+1)==ERROR_SUCCESS)
|
||||
{
|
||||
if (onlyifempty)
|
||||
|
@ -157,9 +169,9 @@ static LONG NSISCALL myRegDeleteKeyEx(HKEY thiskey, LPCTSTR lpSubKey, int onlyif
|
|||
}
|
||||
RegCloseKey(key);
|
||||
{
|
||||
typedef LONG (WINAPI * RegDeleteKeyExAPtr)(HKEY, LPCTSTR, REGSAM, DWORD);
|
||||
RegDeleteKeyExAPtr RDKE = (RegDeleteKeyExAPtr)
|
||||
myGetProcAddress(MGA_RegDeleteKeyExA);
|
||||
typedef LONG (WINAPI * RegDeleteKeyExPtr)(HKEY, LPCTSTR, REGSAM, DWORD);
|
||||
RegDeleteKeyExPtr RDKE = (RegDeleteKeyExPtr)
|
||||
myGetProcAddress(MGA_RegDeleteKeyEx);
|
||||
|
||||
if (RDKE)
|
||||
retval=RDKE(thiskey,lpSubKey,AlterRegistrySAM(0),0);
|
||||
|
@ -195,14 +207,14 @@ static HKEY NSISCALL myRegOpenKey(REGSAM samDesired)
|
|||
// otherwise, returns new_position+1
|
||||
static int NSISCALL ExecuteEntry(entry *entry_)
|
||||
{
|
||||
char *buf0 = bufs[0];
|
||||
char *buf1 = bufs[1];
|
||||
char *buf2 = bufs[2];
|
||||
char *buf3 = bufs[3];
|
||||
TCHAR *buf0 = bufs[0];
|
||||
TCHAR *buf1 = bufs[1];
|
||||
TCHAR *buf2 = bufs[2];
|
||||
TCHAR *buf3 = bufs[3];
|
||||
//char *buf4 = bufs[4];
|
||||
|
||||
char *var0;
|
||||
char *var1;
|
||||
TCHAR *var0;
|
||||
TCHAR *var1;
|
||||
//char *var2;
|
||||
//char *var3;
|
||||
//char *var4;
|
||||
|
@ -239,11 +251,11 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
switch (which)
|
||||
{
|
||||
case EW_NOP:
|
||||
log_printf2("Jump: %d",parm0);
|
||||
log_printf2(_T("Jump: %d"),parm0);
|
||||
return parm0;
|
||||
case EW_ABORT:
|
||||
{
|
||||
log_printf2("Aborting: \"%s\"",GetStringFromParm(0x00));
|
||||
log_printf2(_T("Aborting: \"%s\""),GetStringFromParm(0x00));
|
||||
update_status_text(parm0,0);
|
||||
}
|
||||
return EXEC_ERROR;
|
||||
|
@ -254,23 +266,23 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
case EW_CALL:
|
||||
{
|
||||
int v=resolveaddr(parm0)-1; // address is -1, since we encode it as +1
|
||||
log_printf2("Call: %d",v);
|
||||
log_printf2(_T("Call: %d"),v);
|
||||
return ExecuteCodeSegment(v,NULL);
|
||||
}
|
||||
case EW_UPDATETEXT:
|
||||
log_printf2("detailprint: %s",GetStringFromParm(0x00));
|
||||
log_printf2(_T("detailprint: %s"),GetStringFromParm(0x00));
|
||||
update_status_text(parm0,0);
|
||||
break;
|
||||
case EW_SLEEP:
|
||||
{
|
||||
int x=GetIntFromParm(0);
|
||||
log_printf2("Sleep(%d)",x);
|
||||
log_printf2(_T("Sleep(%d)"),x);
|
||||
Sleep(max(x,1));
|
||||
}
|
||||
break;
|
||||
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
case EW_BRINGTOFRONT:
|
||||
log_printf("BringToFront");
|
||||
log_printf(_T("BringToFront"));
|
||||
SetForegroundWindow(g_hwnd);
|
||||
break;
|
||||
#endif//NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
|
@ -302,44 +314,44 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#endif//NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
case EW_SETFILEATTRIBUTES:
|
||||
{
|
||||
char *buf1=GetStringFromParm(-0x10);
|
||||
log_printf3("SetFileAttributes: \"%s\":%08X",buf1,parm1);
|
||||
TCHAR *buf1=GetStringFromParm(-0x10);
|
||||
log_printf3(_T("SetFileAttributes: \"%s\":%08X"),buf1,parm1);
|
||||
if (!SetFileAttributes(buf1,parm1))
|
||||
{
|
||||
exec_error++;
|
||||
log_printf("SetFileAttributes failed.");
|
||||
log_printf(_T("SetFileAttributes failed."));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EW_CREATEDIR: {
|
||||
char *buf1=GetStringFromParm(-0x10);
|
||||
log_printf3("CreateDirectory: \"%s\" (%d)",buf1,parm1);
|
||||
TCHAR *buf1=GetStringFromParm(-0x10);
|
||||
log_printf3(_T("CreateDirectory: \"%s\" (%d)"),buf1,parm1);
|
||||
{
|
||||
char *p = skip_root(buf1);
|
||||
char c = 'c';
|
||||
TCHAR *p = skip_root(buf1);
|
||||
TCHAR c = _T('c');
|
||||
if (p)
|
||||
{
|
||||
while (c)
|
||||
{
|
||||
p = findchar(p, '\\');
|
||||
p = findchar(p, _T('\\'));
|
||||
c = *p;
|
||||
*p = 0;
|
||||
if (!CreateDirectory(buf1, NULL))
|
||||
{
|
||||
if (GetLastError() != ERROR_ALREADY_EXISTS)
|
||||
{
|
||||
log_printf3("CreateDirectory: can't create \"%s\" (err=%d)",buf1,GetLastError());
|
||||
{
|
||||
log_printf3(_T("CreateDirectory: can't create \"%s\" (err=%d)"),buf1,GetLastError());
|
||||
exec_error++;
|
||||
}
|
||||
else if ((GetFileAttributes(buf1) & FILE_ATTRIBUTE_DIRECTORY) == 0)
|
||||
{
|
||||
log_printf2("CreateDirectory: can't create \"%s\" - a file already exists",buf1);
|
||||
log_printf2(_T("CreateDirectory: can't create \"%s\" - a file already exists"),buf1);
|
||||
exec_error++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log_printf2("CreateDirectory: \"%s\" created",buf1);
|
||||
log_printf2(_T("CreateDirectory: \"%s\" created"),buf1);
|
||||
}
|
||||
*p++ = c;
|
||||
}
|
||||
|
@ -356,22 +368,22 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
break;
|
||||
case EW_IFFILEEXISTS:
|
||||
{
|
||||
char *buf0=GetStringFromParm(0x00);
|
||||
TCHAR *buf0=GetStringFromParm(0x00);
|
||||
if (file_exists(buf0))
|
||||
{
|
||||
log_printf3("IfFileExists: file \"%s\" exists, jumping %d",buf0,parm1);
|
||||
log_printf3(_T("IfFileExists: file \"%s\" exists, jumping %d"),buf0,parm1);
|
||||
return parm1;
|
||||
}
|
||||
log_printf3("IfFileExists: file \"%s\" does not exist, jumping %d",buf0,parm2);
|
||||
log_printf3(_T("IfFileExists: file \"%s\" does not exist, jumping %d"),buf0,parm2);
|
||||
}
|
||||
return parm2;
|
||||
#ifdef NSIS_SUPPORT_RENAME
|
||||
case EW_RENAME:
|
||||
{
|
||||
char *buf3=GetStringFromParm(-0x30);
|
||||
char *buf2=GetStringFromParm(-0x21);
|
||||
char *buf1=GetStringFromParm(0x13);
|
||||
log_printf2("Rename: %s",buf1);
|
||||
TCHAR *buf3=GetStringFromParm(-0x30);
|
||||
TCHAR *buf2=GetStringFromParm(-0x21);
|
||||
TCHAR *buf1=GetStringFromParm(0x13);
|
||||
log_printf2(_T("Rename: %s"),buf1);
|
||||
if (MoveFile(buf3,buf2))
|
||||
{
|
||||
update_status_text_buf1(LANG_RENAME);
|
||||
|
@ -383,13 +395,13 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
MoveFileOnReboot(buf3,buf2);
|
||||
update_status_text_buf1(LANG_RENAMEONREBOOT);
|
||||
log_printf2("Rename on reboot: %s",buf1);
|
||||
log_printf2(_T("Rename on reboot: %s"),buf1);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
exec_error++;
|
||||
log_printf2("Rename failed: %s",buf1);
|
||||
log_printf2(_T("Rename failed: %s"),buf1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -398,9 +410,9 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_FNUTIL
|
||||
case EW_GETFULLPATHNAME:
|
||||
{
|
||||
char *fp;
|
||||
char *p=var1;
|
||||
char *buf0=GetStringFromParm(0x00);
|
||||
TCHAR *fp;
|
||||
TCHAR *p=var1;
|
||||
TCHAR *buf0=GetStringFromParm(0x00);
|
||||
if (!GetFullPathName(buf0,NSIS_MAX_STRLEN,p,&fp))
|
||||
{
|
||||
exec_error++;
|
||||
|
@ -424,9 +436,9 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
break;
|
||||
case EW_SEARCHPATH:
|
||||
{
|
||||
char *fp;
|
||||
char *p=var0;
|
||||
char *buf0=GetStringFromParm(-0x01);
|
||||
TCHAR *fp;
|
||||
TCHAR *p=var0;
|
||||
TCHAR *buf0=GetStringFromParm(-0x01);
|
||||
if (!SearchPath(NULL,buf0,NULL,NSIS_MAX_STRLEN,p,&fp))
|
||||
{
|
||||
exec_error++;
|
||||
|
@ -436,7 +448,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
break;
|
||||
case EW_GETTEMPFILENAME:
|
||||
{
|
||||
char *textout=var0;
|
||||
TCHAR *textout=var0;
|
||||
if (!my_GetTempFileName(textout, GetStringFromParm(-0x11)))
|
||||
exec_error++;
|
||||
}
|
||||
|
@ -447,10 +459,10 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
HANDLE hOut;
|
||||
int ret;
|
||||
char *buf3 = GetStringFromParm(0x31);
|
||||
TCHAR *buf3 = GetStringFromParm(0x31);
|
||||
int overwriteflag = parm0 & 7;
|
||||
|
||||
log_printf4("File: overwriteflag=%d, allowskipfilesflag=%d, name=\"%s\"",overwriteflag,(parm0>>3)&MB_ABORTRETRYIGNORE,buf3);
|
||||
log_printf4(_T("File: overwriteflag=%d, allowskipfilesflag=%d, name=\"%s\""),overwriteflag,(parm0>>3)&MB_ABORTRETRYIGNORE,buf3);
|
||||
if (validpathspec(buf3))
|
||||
{
|
||||
mystrcpy(buf0,buf3);
|
||||
|
@ -481,10 +493,10 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
update_status_text(LANG_SKIPPED,buf3);
|
||||
if (overwriteflag==2) exec_error++;
|
||||
log_printf3("File: skipped: \"%s\" (overwriteflag=%d)",buf0,overwriteflag);
|
||||
log_printf3(_T("File: skipped: \"%s\" (overwriteflag=%d)"),buf0,overwriteflag);
|
||||
break;
|
||||
}
|
||||
log_printf2("File: error creating \"%s\"",buf0);
|
||||
log_printf2(_T("File: error creating \"%s\""),buf0);
|
||||
|
||||
mystrcpy(buf2,g_usrvars[0]); // save $0
|
||||
mystrcpy(g_usrvars[0],buf0); // copy file name to $0
|
||||
|
@ -495,14 +507,14 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
switch (my_MessageBox(buf1, parm0>>3))
|
||||
{
|
||||
case IDRETRY:
|
||||
log_printf("File: error, user retry");
|
||||
log_printf(_T("File: error, user retry"));
|
||||
goto _tryagain;
|
||||
case IDIGNORE:
|
||||
log_printf("File: error, user cancel");
|
||||
log_printf(_T("File: error, user cancel"));
|
||||
g_exec_flags.exec_error++;
|
||||
return 0;
|
||||
default:
|
||||
log_printf("File: error, user abort");
|
||||
log_printf(_T("File: error, user abort"));
|
||||
update_status_text(LANG_CANTWRITE,buf0);
|
||||
return EXEC_ERROR;
|
||||
}
|
||||
|
@ -515,7 +527,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
g_exec_flags.status_update--;
|
||||
}
|
||||
|
||||
log_printf3("File: wrote %d to \"%s\"",ret,buf0);
|
||||
log_printf3(_T("File: wrote %d to \"%s\""),ret,buf0);
|
||||
|
||||
if (parm3 != 0xffffffff || parm4 != 0xffffffff)
|
||||
SetFileTime(hOut,(FILETIME*)(lent.offsets+3),NULL,(FILETIME*)(lent.offsets+3));
|
||||
|
@ -533,7 +545,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
GetNSISString(buf0,LANG_ERRORDECOMPRESSING);
|
||||
}
|
||||
log_printf2("%s",buf0);
|
||||
log_printf2(_T("%s"),buf0);
|
||||
my_MessageBox(buf0,MB_OK|MB_ICONSTOP|(IDOK<<21));
|
||||
return EXEC_ERROR;
|
||||
}
|
||||
|
@ -543,8 +555,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_DELETE
|
||||
case EW_DELETEFILE:
|
||||
{
|
||||
char *buf0=GetStringFromParm(0x00);
|
||||
log_printf2("Delete: \"%s\"",buf0);
|
||||
TCHAR *buf0=GetStringFromParm(0x00);
|
||||
log_printf2(_T("Delete: \"%s\""),buf0);
|
||||
myDelete(buf0,parm1);
|
||||
}
|
||||
break;
|
||||
|
@ -553,8 +565,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
case EW_MESSAGEBOX: // MessageBox
|
||||
{
|
||||
int v;
|
||||
char *buf3=GetStringFromParm(0x31);
|
||||
log_printf3("MessageBox: %d,\"%s\"",parm0,buf3);
|
||||
TCHAR *buf3=GetStringFromParm(0x31);
|
||||
log_printf3(_T("MessageBox: %d,\"%s\""),parm0,buf3);
|
||||
v=my_MessageBox(buf3,parm0);
|
||||
if (v)
|
||||
{
|
||||
|
@ -574,8 +586,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_RMDIR
|
||||
case EW_RMDIR:
|
||||
{
|
||||
char *buf1=GetStringFromParm(-0x10);
|
||||
log_printf2("RMDir: \"%s\"",buf1);
|
||||
TCHAR *buf1=GetStringFromParm(-0x10);
|
||||
log_printf2(_T("RMDir: \"%s\""),buf1);
|
||||
|
||||
myDelete(buf1,parm1);
|
||||
}
|
||||
|
@ -584,7 +596,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_STROPTS
|
||||
case EW_STRLEN:
|
||||
{
|
||||
char *buf0=GetStringFromParm(0x01);
|
||||
TCHAR *buf0=GetStringFromParm(0x01);
|
||||
myitoa(var0,mystrlen(buf0));
|
||||
}
|
||||
break;
|
||||
|
@ -593,8 +605,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
int newlen=GetIntFromParm(2);
|
||||
int start=GetIntFromParm(3);
|
||||
int l;
|
||||
char *p=var0;
|
||||
char *buf0=GetStringFromParm(0x01);
|
||||
TCHAR *p=var0;
|
||||
TCHAR *buf0=GetStringFromParm(0x01);
|
||||
*p=0;
|
||||
if (!parm2 || newlen)
|
||||
{
|
||||
|
@ -617,8 +629,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
break;
|
||||
case EW_STRCMP:
|
||||
{
|
||||
char *buf2=GetStringFromParm(0x20);
|
||||
char *buf3=GetStringFromParm(0x31);
|
||||
TCHAR *buf2=GetStringFromParm(0x20);
|
||||
TCHAR *buf3=GetStringFromParm(0x31);
|
||||
if (!parm4) {
|
||||
// case insensitive
|
||||
if (!lstrcmpi(buf2,buf3)) return parm2;
|
||||
|
@ -633,8 +645,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_ENVIRONMENT
|
||||
case EW_READENVSTR:
|
||||
{
|
||||
char *p=var0;
|
||||
char *buf0=GetStringFromParm(0x01);
|
||||
TCHAR *p=var0;
|
||||
TCHAR *buf0=GetStringFromParm(0x01);
|
||||
if (!ExpandEnvironmentStrings(buf0,p,NSIS_MAX_STRLEN)
|
||||
|| (parm2 && !lstrcmp(buf0, p)))
|
||||
{
|
||||
|
@ -666,7 +678,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
case EW_INTOP:
|
||||
{
|
||||
int v,v2;
|
||||
char *p=var0;
|
||||
TCHAR *p=var0;
|
||||
v=GetIntFromParm(1);
|
||||
v2=GetIntFromParm(2);
|
||||
switch (parm3)
|
||||
|
@ -689,7 +701,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
}
|
||||
break;
|
||||
case EW_INTFMT: {
|
||||
char *buf0=GetStringFromParm(0x01);
|
||||
TCHAR *buf0=GetStringFromParm(0x01);
|
||||
wsprintf(var0,
|
||||
buf0,
|
||||
GetIntFromParm(2));
|
||||
|
@ -706,7 +718,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
while (cnt--&&s) s=s->next;
|
||||
if (!s)
|
||||
{
|
||||
log_printf2("Exch: stack < %d elements",parm2);
|
||||
log_printf2(_T("Exch: stack < %d elements"),parm2);
|
||||
my_MessageBox(GetNSISStringTT(LANG_INSTCORRUPTED),MB_OK|MB_ICONSTOP|(IDOK<<21));
|
||||
return EXEC_ERROR;
|
||||
}
|
||||
|
@ -718,7 +730,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
if (!s)
|
||||
{
|
||||
log_printf("Pop: stack empty");
|
||||
log_printf(_T("Pop: stack empty"));
|
||||
exec_error++;
|
||||
break;
|
||||
}
|
||||
|
@ -752,12 +764,15 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
int msg=GetIntFromParm(2);
|
||||
|
||||
if (parm5>>2) exec_error += !SendMessageTimeout(hwnd,msg,b3,b4,SMTO_NORMAL,parm5>>2,(LPDWORD)&v);
|
||||
// Jim Park: This sends script messages. Some messages require
|
||||
// settings for Unicode. This means the user's script may need
|
||||
// to change for Unicode NSIS.
|
||||
else v=SendMessage(hwnd,msg,b3,b4);
|
||||
}
|
||||
else
|
||||
{
|
||||
char *buf0=GetStringFromParm(0x01);
|
||||
char *buf1=GetStringFromParm(0x12);
|
||||
TCHAR *buf0=GetStringFromParm(0x01);
|
||||
TCHAR *buf1=GetStringFromParm(0x12);
|
||||
v=(int)FindWindowEx((HWND)b3,(HWND)b4,buf0[0]?buf0:NULL,buf1[0]?buf1:NULL);
|
||||
}
|
||||
|
||||
|
@ -825,7 +840,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
HWND hw=(HWND)GetIntFromParm(0);
|
||||
int a=GetIntFromParm(1);
|
||||
if (parm2) log_printf("HideWindow");
|
||||
if (parm2) log_printf(_T("HideWindow"));
|
||||
if (!parm3)
|
||||
ShowWindow(hw,a);
|
||||
else
|
||||
|
@ -838,20 +853,20 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
case EW_SHELLEXEC: // this uses improvements of Andras Varga
|
||||
{
|
||||
int x;
|
||||
char *buf0=GetStringFromParm(0x00);
|
||||
char *buf3=GetStringFromParm(0x31);
|
||||
char *buf2=GetStringFromParm(0x22);
|
||||
char *buf1=GetStringFromParm(0x15);
|
||||
TCHAR *buf0=GetStringFromParm(0x00);
|
||||
TCHAR *buf3=GetStringFromParm(0x31);
|
||||
TCHAR *buf2=GetStringFromParm(0x22);
|
||||
TCHAR *buf1=GetStringFromParm(0x15);
|
||||
update_status_text_buf1(LANG_EXECSHELL);
|
||||
x=(int)ShellExecute(g_hwnd,buf0[0]?buf0:NULL,buf3,buf2[0]?buf2:NULL,state_output_directory,parm3);
|
||||
if (x < 33)
|
||||
{
|
||||
log_printf5("ExecShell: warning: error (\"%s\": file:\"%s\" params:\"%s\")=%d",buf0,buf3,buf2,x);
|
||||
log_printf5(_T("ExecShell: warning: error (\"%s\": file:\"%s\" params:\"%s\")=%d"),buf0,buf3,buf2,x);
|
||||
exec_error++;
|
||||
}
|
||||
else
|
||||
{
|
||||
log_printf4("ExecShell: success (\"%s\": file:\"%s\" params:\"%s\")",buf0,buf3,buf2);
|
||||
log_printf4(_T("ExecShell: success (\"%s\": file:\"%s\" params:\"%s\")"),buf0,buf3,buf2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -860,15 +875,15 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
case EW_EXECUTE:
|
||||
{
|
||||
HANDLE hProc;
|
||||
char *buf0=GetStringFromParm(0x00);
|
||||
log_printf2("Exec: command=\"%s\"",buf0);
|
||||
TCHAR *buf0=GetStringFromParm(0x00);
|
||||
log_printf2(_T("Exec: command=\"%s\""),buf0);
|
||||
update_status_text(LANG_EXECUTE,buf0);
|
||||
|
||||
hProc=myCreateProcess(buf0);
|
||||
|
||||
if (hProc)
|
||||
{
|
||||
log_printf2("Exec: success (\"%s\")",buf0);
|
||||
log_printf2(_T("Exec: success (\"%s\")"),buf0);
|
||||
if (parm2)
|
||||
{
|
||||
DWORD lExitCode;
|
||||
|
@ -886,7 +901,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
else
|
||||
{
|
||||
exec_error++;
|
||||
log_printf2("Exec: failed createprocess (\"%s\")",buf0);
|
||||
log_printf2(_T("Exec: failed createprocess (\"%s\")"),buf0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -898,9 +913,9 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
// also allows GetFileTime to be passed a wildcard.
|
||||
{
|
||||
WIN32_FIND_DATA *ffd;
|
||||
char *highout=var0;
|
||||
char *lowout=var1;
|
||||
char *buf0=GetStringFromParm(0x02);
|
||||
TCHAR *highout=var0;
|
||||
TCHAR *lowout=var1;
|
||||
TCHAR *buf0=GetStringFromParm(0x02);
|
||||
|
||||
ffd=file_exists(buf0);
|
||||
if (ffd)
|
||||
|
@ -919,12 +934,12 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_GETDLLVERSION
|
||||
case EW_GETDLLVERSION:
|
||||
{
|
||||
char *highout=var0;
|
||||
char *lowout=var1;
|
||||
TCHAR *highout=var0;
|
||||
TCHAR *lowout=var1;
|
||||
DWORD s1;
|
||||
VS_FIXEDFILEINFO *pvsf1;
|
||||
DWORD d;
|
||||
char *buf1=GetStringFromParm(-0x12);
|
||||
TCHAR *buf1=GetStringFromParm(-0x12);
|
||||
s1=GetFileVersionInfoSize(buf1,&d);
|
||||
*lowout=*highout=0;
|
||||
exec_error++;
|
||||
|
@ -935,7 +950,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
if (b1)
|
||||
{
|
||||
UINT uLen;
|
||||
if (GetFileVersionInfo(buf1,0,s1,b1) && VerQueryValue(b1,"\\",(void*)&pvsf1,&uLen))
|
||||
if (GetFileVersionInfo(buf1,0,s1,b1) && VerQueryValue(b1,_T("\\"),(void*)&pvsf1,&uLen))
|
||||
{
|
||||
myitoa(highout,pvsf1->dwFileVersionMS);
|
||||
myitoa(lowout,pvsf1->dwFileVersionLS);
|
||||
|
@ -955,8 +970,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
if (SUCCEEDED(g_hres))
|
||||
{
|
||||
HANDLE h=NULL;
|
||||
char *buf1=GetStringFromParm(-0x10);
|
||||
char *buf0=GetStringFromParm(0x01);
|
||||
TCHAR *buf1=GetStringFromParm(-0x10);
|
||||
TCHAR *buf0=GetStringFromParm(0x01);
|
||||
|
||||
if (parm4)
|
||||
h=GetModuleHandle(buf1);
|
||||
|
@ -975,12 +990,12 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
}
|
||||
else
|
||||
{
|
||||
void (*func)(HWND,int,char*,void*,void*);
|
||||
void (*func)(HWND,int,TCHAR*,void*,void*);
|
||||
func=(void*)funke;
|
||||
func(
|
||||
g_hwnd,
|
||||
NSIS_MAX_STRLEN,
|
||||
(char*)g_usrvars,
|
||||
(TCHAR*)g_usrvars,
|
||||
#ifdef NSIS_SUPPORT_STACK
|
||||
(void*)&g_st,
|
||||
#else
|
||||
|
@ -993,20 +1008,20 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
else
|
||||
{
|
||||
update_status_text(LANG_CANNOTFINDSYMBOL,buf0);
|
||||
log_printf3("Error registering DLL: %s not found in %s",buf0,buf1);
|
||||
log_printf3(_T("Error registering DLL: %s not found in %s"),buf0,buf1);
|
||||
}
|
||||
if (!parm3 && Plugins_CanUnload(h)) FreeLibrary(h);
|
||||
}
|
||||
else
|
||||
{
|
||||
update_status_text_buf1(LANG_COULDNOTLOAD);
|
||||
log_printf2("Error registering DLL: Could not load %s",buf1);
|
||||
log_printf2(_T("Error registering DLL: Could not load %s"),buf1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
update_status_text_buf1(LANG_NOOLE);
|
||||
log_printf("Error registering DLL: Could not initialize OLE");
|
||||
log_printf(_T("Error registering DLL: Could not initialize OLE"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1014,11 +1029,11 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_CREATESHORTCUT
|
||||
case EW_CREATESHORTCUT:
|
||||
{
|
||||
char *buf1=GetStringFromParm(-0x10);
|
||||
char *buf2=GetStringFromParm(-0x21);
|
||||
char *buf0=GetStringFromParm(0x02);
|
||||
char *buf3=GetStringFromParm(-0x33);
|
||||
char *buf4=GetStringFromParm(0x45);
|
||||
TCHAR *buf1=GetStringFromParm(-0x10);
|
||||
TCHAR *buf2=GetStringFromParm(-0x21);
|
||||
TCHAR *buf0=GetStringFromParm(0x02);
|
||||
TCHAR *buf3=GetStringFromParm(-0x33);
|
||||
TCHAR *buf4=GetStringFromParm(0x45);
|
||||
|
||||
HRESULT hres;
|
||||
IShellLink* psl;
|
||||
|
@ -1026,7 +1041,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
if (!validpathspec(buf2))
|
||||
GetStringFromParm(0x21);
|
||||
|
||||
log_printf8("CreateShortCut: out: \"%s\", in: \"%s %s\", icon: %s,%d, sw=%d, hk=%d",
|
||||
log_printf8(_T("CreateShortCut: out: \"%s\", in: \"%s %s\", icon: %s,%d, sw=%d, hk=%d"),
|
||||
buf1,buf2,buf0,buf3,parm4&0xff,(parm4&0xff00)>>8,parm4>>16);
|
||||
|
||||
hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
|
||||
|
@ -1075,10 +1090,10 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
int res;
|
||||
SHFILEOPSTRUCT op;
|
||||
char *buf0=GetStringFromParm(0x00);
|
||||
char *buf1=GetStringFromParm(0x11);
|
||||
char *buf2=GetStringFromParm(0x23); // LANG_COPYTO + buf1
|
||||
log_printf3("CopyFiles \"%s\"->\"%s\"",buf0,buf1);
|
||||
TCHAR *buf0=GetStringFromParm(0x00);
|
||||
TCHAR *buf1=GetStringFromParm(0x11);
|
||||
TCHAR *buf2=GetStringFromParm(0x23); // LANG_COPYTO + buf1
|
||||
log_printf3(_T("CopyFiles \"%s\"->\"%s\""),buf0,buf1);
|
||||
|
||||
if (!file_exists(buf0))
|
||||
{
|
||||
|
@ -1127,9 +1142,9 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_INIFILES
|
||||
case EW_WRITEINI:
|
||||
{
|
||||
char *sec=0, *key=0, *str=0;
|
||||
TCHAR *sec=0, *key=0, *str=0;
|
||||
#ifdef NSIS_CONFIG_LOG
|
||||
mystrcpy(buf1,"<RM>");
|
||||
mystrcpy(buf1,_T("<RM>"));
|
||||
mystrcpy(buf2,buf1);
|
||||
#endif
|
||||
if (parm0)
|
||||
|
@ -1145,18 +1160,18 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
str=GetStringFromParm(0x22);
|
||||
}
|
||||
buf3=GetStringFromParm(-0x33);
|
||||
log_printf5("WriteINIStr: wrote [%s] %s=%s in %s",buf0,buf1,buf2,buf3);
|
||||
log_printf5(_T("WriteINIStr: wrote [%s] %s=%s in %s"),buf0,buf1,buf2,buf3);
|
||||
if (!WritePrivateProfileString(sec,key,str,buf3)) exec_error++;
|
||||
}
|
||||
break;
|
||||
case EW_READINISTR:
|
||||
{
|
||||
DWORD errstr = CHAR4_TO_DWORD('!', 'N', '~', 0);
|
||||
char *p=var0;
|
||||
char *buf0=GetStringFromParm(0x01);
|
||||
char *buf1=GetStringFromParm(0x12);
|
||||
char *buf2=GetStringFromParm(-0x23);
|
||||
GetPrivateProfileString(buf0,buf1,(LPCSTR)&errstr,p,NSIS_MAX_STRLEN-1,buf2);
|
||||
DWORD errstr = CHAR4_TO_DWORD(_T('!'), _T('N'), _T('~'), 0);
|
||||
TCHAR *p=var0;
|
||||
TCHAR *buf0=GetStringFromParm(0x01);
|
||||
TCHAR *buf1=GetStringFromParm(0x12);
|
||||
TCHAR *buf2=GetStringFromParm(-0x23);
|
||||
GetPrivateProfileString(buf0,buf1,(LPCTSTR)&errstr,p,NSIS_MAX_STRLEN-1,buf2);
|
||||
if (*(DWORD*)p == errstr)
|
||||
{
|
||||
exec_error++;
|
||||
|
@ -1169,22 +1184,22 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
case EW_DELREG:
|
||||
{
|
||||
long res=!ERROR_SUCCESS;
|
||||
const char *rkn UNUSED=RegKeyHandleToName((HKEY)parm1);
|
||||
const TCHAR *rkn UNUSED=RegKeyHandleToName((HKEY)parm1);
|
||||
if (!parm4)
|
||||
{
|
||||
HKEY hKey=myRegOpenKey(KEY_SET_VALUE);
|
||||
if (hKey)
|
||||
{
|
||||
char *buf3=GetStringFromParm(0x33);
|
||||
TCHAR *buf3=GetStringFromParm(0x33);
|
||||
res = RegDeleteValue(hKey,buf3);
|
||||
log_printf4("DeleteRegValue: \"%s\\%s\" \"%s\"",rkn,buf2,buf3);
|
||||
log_printf4(_T("DeleteRegValue: \"%s\\%s\" \"%s\""),rkn,buf2,buf3);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char *buf2=GetStringFromParm(0x22);
|
||||
log_printf3("DeleteRegKey: \"%s\\%s\"",rkn,buf2);
|
||||
TCHAR *buf2=GetStringFromParm(0x22);
|
||||
log_printf3(_T("DeleteRegKey: \"%s\\%s\""),rkn,buf2);
|
||||
res = myRegDeleteKeyEx(GetRegRootKey(parm1),buf2,parm4&2);
|
||||
}
|
||||
if (res != ERROR_SUCCESS)
|
||||
|
@ -1197,9 +1212,9 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
HKEY rootkey=GetRegRootKey(parm0);
|
||||
int type=parm4;
|
||||
int rtype=parm5;
|
||||
char *buf0=GetStringFromParm(0x02);
|
||||
char *buf1=GetStringFromParm(0x11);
|
||||
const char *rkn UNUSED=RegKeyHandleToName(rootkey);
|
||||
TCHAR *buf0=GetStringFromParm(0x02);
|
||||
TCHAR *buf1=GetStringFromParm(0x11);
|
||||
const TCHAR *rkn UNUSED=RegKeyHandleToName(rootkey);
|
||||
|
||||
exec_error++;
|
||||
if (RegCreateKeyEx(rootkey,buf1,0,0,0,AlterRegistrySAM(KEY_SET_VALUE),0,&hKey,0) == ERROR_SUCCESS)
|
||||
|
@ -1209,31 +1224,31 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
if (type == REG_SZ)
|
||||
{
|
||||
GetStringFromParm(0x23);
|
||||
size = mystrlen((char *) data) + 1;
|
||||
size = (mystrlen((TCHAR *) data) + 1)*sizeof(TCHAR);
|
||||
if (rtype == REG_SZ)
|
||||
{
|
||||
log_printf5("WriteRegStr: \"%s\\%s\" \"%s\"=\"%s\"",rkn,buf1,buf0,data);
|
||||
log_printf5(_T("WriteRegStr: \"%s\\%s\" \"%s\"=\"%s\""),rkn,buf1,buf0,data);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_printf5("WriteRegExpandStr: \"%s\\%s\" \"%s\"=\"%s\"",rkn,buf1,buf0,data);
|
||||
log_printf5(_T("WriteRegExpandStr: \"%s\\%s\" \"%s\"=\"%s\""),rkn,buf1,buf0,data);
|
||||
}
|
||||
}
|
||||
if (type == REG_DWORD)
|
||||
{
|
||||
*(LPDWORD) data = GetIntFromParm(3);
|
||||
size = sizeof(DWORD);
|
||||
log_printf5("WriteRegDWORD: \"%s\\%s\" \"%s\"=\"0x%08x\"",rkn,buf1,buf0,*(LPDWORD) data);
|
||||
log_printf5(_T("WriteRegDWORD: \"%s\\%s\" \"%s\"=\"0x%08x\""),rkn,buf1,buf0,*(LPDWORD) data);
|
||||
}
|
||||
if (type == REG_BINARY)
|
||||
{
|
||||
#ifdef NSIS_CONFIG_LOG
|
||||
char binbuf[128];
|
||||
TCHAR binbuf[128];
|
||||
#endif
|
||||
// use buf2, buf3 and buf4
|
||||
size = GetCompressedDataFromDataBlockToMemory(parm3, data, 3 * NSIS_MAX_STRLEN);
|
||||
size = GetCompressedDataFromDataBlockToMemory(parm3, data, (3 * NSIS_MAX_STRLEN)*sizeof(TCHAR));
|
||||
LogData2Hex(binbuf, sizeof(binbuf), data, size);
|
||||
log_printf5("WriteRegBin: \"%s\\%s\" \"%s\"=\"%s\"",rkn,buf1,buf0,binbuf);
|
||||
log_printf5(_T("WriteRegBin: \"%s\\%s\" \"%s\"=\"%s\""),rkn,buf1,buf0,binbuf);
|
||||
}
|
||||
|
||||
if (size >= 0 && RegSetValueEx(hKey,buf0,0,rtype,data,size) == ERROR_SUCCESS)
|
||||
|
@ -1242,19 +1257,19 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
}
|
||||
else
|
||||
{
|
||||
log_printf4("WriteReg: error writing into \"%s\\%s\" \"%s\"",rkn,buf1,buf0);
|
||||
log_printf4(_T("WriteReg: error writing into \"%s\\%s\" \"%s\""),rkn,buf1,buf0);
|
||||
}
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
else { log_printf3("WriteReg: error creating key \"%s\\%s\"",rkn,buf1); }
|
||||
else { log_printf3(_T("WriteReg: error creating key \"%s\\%s\""),rkn,buf1); }
|
||||
}
|
||||
break;
|
||||
case EW_READREGSTR: // read registry string
|
||||
{
|
||||
HKEY hKey=myRegOpenKey(KEY_READ);
|
||||
char *p=var0;
|
||||
char *buf3=GetStringFromParm(0x33); // buf3 == key name
|
||||
TCHAR *p=var0;
|
||||
TCHAR *buf3=GetStringFromParm(0x33); // buf3 == key name
|
||||
p[0]=0;
|
||||
if (hKey)
|
||||
{
|
||||
|
@ -1288,7 +1303,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
case EW_REGENUM:
|
||||
{
|
||||
HKEY key=myRegOpenKey(KEY_READ);
|
||||
char *p=var0;
|
||||
TCHAR *p=var0;
|
||||
int b=GetIntFromParm(3);
|
||||
p[0]=0;
|
||||
if (key)
|
||||
|
@ -1311,15 +1326,15 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_FILEFUNCTIONS
|
||||
case EW_FCLOSE:
|
||||
{
|
||||
char *t=var0;
|
||||
TCHAR *t=var0;
|
||||
if (*t) CloseHandle((HANDLE)myatoi(t));
|
||||
}
|
||||
break;
|
||||
case EW_FOPEN:
|
||||
{
|
||||
HANDLE h;
|
||||
char *handleout=var0;
|
||||
char *buf1=GetStringFromParm(-0x13);
|
||||
TCHAR *handleout=var0;
|
||||
TCHAR *buf1=GetStringFromParm(-0x13);
|
||||
h=myOpenFile(buf1,parm1,parm2);
|
||||
if (h == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
|
@ -1336,8 +1351,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
DWORD dw;
|
||||
int l;
|
||||
char *t=var0;
|
||||
if (parm2)
|
||||
TCHAR *t=var0;
|
||||
if (parm2) // WriteByte
|
||||
{
|
||||
((unsigned char *)buf1)[0]=GetIntFromParm(1)&0xff;
|
||||
l=1;
|
||||
|
@ -1368,7 +1383,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
while (rpos<maxlen)
|
||||
{
|
||||
char c;
|
||||
if (!ReadFile(h,&c,1,&dw,NULL) || dw != 1) break;
|
||||
if (!ReadFile(h,&c,sizeof(c),&dw,NULL) || dw != sizeof(c)) break;
|
||||
if (parm3)
|
||||
{
|
||||
myitoa(textout,(unsigned int)(unsigned char)c);
|
||||
|
@ -1376,7 +1391,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
}
|
||||
if (lc == '\r' || lc == '\n')
|
||||
{
|
||||
if (lc == c || (c != '\r' && c != '\n')) SetFilePointer(h,-1,NULL,FILE_CURRENT);
|
||||
if (lc == c || (c != '\r' && c != '\n')) SetFilePointer(h,-((int)(sizeof(c))),NULL,FILE_CURRENT);
|
||||
else textout[rpos++]=c;
|
||||
break;
|
||||
}
|
||||
|
@ -1391,7 +1406,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
break;
|
||||
case EW_FSEEK:
|
||||
{
|
||||
char *t=var0;
|
||||
TCHAR *t=var0;
|
||||
if (*t)
|
||||
{
|
||||
DWORD v=SetFilePointer((HANDLE)myatoi(t),GetIntFromParm(2),NULL,parm3);
|
||||
|
@ -1407,14 +1422,14 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
#ifdef NSIS_SUPPORT_FINDFIRST
|
||||
case EW_FINDCLOSE:
|
||||
{
|
||||
char *t=var0;
|
||||
TCHAR *t=var0;
|
||||
if (*t) FindClose((HANDLE)myatoi(t));
|
||||
}
|
||||
break;
|
||||
case EW_FINDNEXT:
|
||||
{
|
||||
char *textout=var0;
|
||||
char *t=var1;
|
||||
TCHAR *textout=var0;
|
||||
TCHAR *t=var1;
|
||||
WIN32_FIND_DATA fd;
|
||||
if (*t && FindNextFile((HANDLE)myatoi(t),&fd))
|
||||
{
|
||||
|
@ -1430,11 +1445,11 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
break;
|
||||
case EW_FINDFIRST:
|
||||
{
|
||||
char *textout=var0;
|
||||
char *handleout=var1;
|
||||
TCHAR *textout=var0;
|
||||
TCHAR *handleout=var1;
|
||||
HANDLE h;
|
||||
WIN32_FIND_DATA fd;
|
||||
char *buf0=GetStringFromParm(0x02);
|
||||
TCHAR *buf0=GetStringFromParm(0x02);
|
||||
h=FindFirstFile(buf0,&fd);
|
||||
if (h == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
|
@ -1455,7 +1470,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
{
|
||||
int ret=-666;
|
||||
HANDLE hFile;
|
||||
char *buf1=GetStringFromParm(-0x10);
|
||||
TCHAR *buf1=GetStringFromParm(-0x10);
|
||||
|
||||
if (!validpathspec(buf1))
|
||||
GetStringFromParm(-0x13);
|
||||
|
@ -1473,6 +1488,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
SetSelfFilePointer(0);
|
||||
ReadSelfFile((char*)filebuf,filehdrsize);
|
||||
{
|
||||
// parm1 = uninstdata_offset
|
||||
// parm2 = m_unicon_size
|
||||
unsigned char* seeker;
|
||||
unsigned char* unicon_data = seeker = (unsigned char*)GlobalAlloc(GPTR,parm2);
|
||||
if (unicon_data) {
|
||||
|
@ -1495,7 +1512,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
}
|
||||
CloseHandle(hFile);
|
||||
}
|
||||
log_printf3("created uninstaller: %d, \"%s\"",ret,buf1);
|
||||
log_printf3(_T("created uninstaller: %d, \"%s\""),ret,buf1);
|
||||
{
|
||||
int str = LANG_CREATEDUNINST;
|
||||
if (ret < 0)
|
||||
|
@ -1513,9 +1530,9 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
case EW_LOG:
|
||||
if (parm0)
|
||||
{
|
||||
log_printf2("settings logging to %d",parm1);
|
||||
log_printf2(_T("settings logging to %d"),parm1);
|
||||
log_dolog=parm1;
|
||||
log_printf2("logging set to %d",parm1);
|
||||
log_printf2(_T("logging set to %d"),parm1);
|
||||
#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT)
|
||||
if (parm1)
|
||||
build_g_logfile();
|
||||
|
@ -1525,8 +1542,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
|
|||
}
|
||||
else
|
||||
{
|
||||
char *buf0=GetStringFromParm(0x01);
|
||||
log_printf2("%s",buf0);
|
||||
TCHAR *buf0=GetStringFromParm(0x01);
|
||||
log_printf2(_T("%s"),buf0);
|
||||
}
|
||||
break;
|
||||
#endif//NSIS_CONFIG_LOG
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Reviewed for Unicode support by Jim Park -- 08/22/2007
|
||||
*/
|
||||
|
||||
#ifndef _EXEC_H_
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/13/2007
|
||||
*/
|
||||
|
||||
#include "../Platform.h"
|
||||
|
@ -23,6 +25,7 @@
|
|||
#include "ui.h"
|
||||
#include "exec.h"
|
||||
#include "../crc32.h"
|
||||
#include "../tchar.h"
|
||||
|
||||
#ifdef NSIS_CONFIG_COMPRESSION_SUPPORT
|
||||
#ifdef NSIS_COMPRESS_USE_ZLIB
|
||||
|
@ -89,12 +92,12 @@ BOOL CALLBACK verProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
if (uMsg == WM_TIMER)
|
||||
{
|
||||
char bt[64];
|
||||
TCHAR bt[64];
|
||||
int percent=calc_percent();
|
||||
#ifdef NSIS_COMPRESS_WHOLE
|
||||
char *msg=g_header?_LANG_UNPACKING:_LANG_VERIFYINGINST;
|
||||
TCHAR *msg=g_header?_LANG_UNPACKING:_LANG_VERIFYINGINST;
|
||||
#else
|
||||
char *msg=_LANG_VERIFYINGINST;
|
||||
TCHAR *msg=_LANG_VERIFYINGINST;
|
||||
#endif
|
||||
|
||||
wsprintf(bt,msg,percent);
|
||||
|
@ -130,8 +133,8 @@ void handle_ver_dlg(BOOL kill)
|
|||
{
|
||||
if (g_exec_flags.status_update & 1)
|
||||
{
|
||||
char bt[64];
|
||||
wsprintf(bt, "... %d%%", calc_percent());
|
||||
TCHAR bt[64];
|
||||
wsprintf(bt, _T("... %d%%"), calc_percent());
|
||||
update_status_text(0, bt);
|
||||
}
|
||||
}
|
||||
|
@ -148,6 +151,7 @@ void handle_ver_dlg(BOOL kill)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif//NSIS_CONFIG_CRC_SUPPORT || NSIS_COMPRESS_WHOLE
|
||||
#endif//NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
|
||||
|
@ -155,7 +159,7 @@ void handle_ver_dlg(BOOL kill)
|
|||
static z_stream g_inflate_stream;
|
||||
#endif
|
||||
|
||||
const char * NSISCALL loadHeaders(int cl_flags)
|
||||
const TCHAR * NSISCALL loadHeaders(int cl_flags)
|
||||
{
|
||||
int left;
|
||||
#ifdef NSIS_CONFIG_CRC_SUPPORT
|
||||
|
@ -234,7 +238,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
|
|||
|
||||
#ifndef NSIS_CONFIG_CRC_ANAL
|
||||
left = h.length_of_all_following_data - 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 stuff on the end and it'll still work.
|
||||
#else //!NSIS_CONFIG_CRC_ANAL
|
||||
left -= 4;
|
||||
#endif//NSIS_CONFIG_CRC_ANAL
|
||||
|
@ -292,7 +296,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
|
|||
inflateReset(&g_inflate_stream);
|
||||
|
||||
{
|
||||
char fno[MAX_PATH];
|
||||
TCHAR fno[MAX_PATH];
|
||||
my_GetTempFileName(fno, state_temp_dir);
|
||||
dbd_hFile=CreateFile(fno,GENERIC_WRITE|GENERIC_READ,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE,NULL);
|
||||
if (dbd_hFile == INVALID_HANDLE_VALUE)
|
||||
|
@ -345,6 +349,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
|
|||
|
||||
#if !defined(NSIS_COMPRESS_WHOLE) || !defined(NSIS_CONFIG_COMPRESSION_SUPPORT)
|
||||
|
||||
// Decompress data.
|
||||
int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
|
||||
{
|
||||
static char inbuffer[IBUFSIZE+OBUFSIZE];
|
||||
|
@ -365,7 +370,7 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
|
|||
#ifdef NSIS_CONFIG_COMPRESSION_SUPPORT
|
||||
if (input_len & 0x80000000) // compressed
|
||||
{
|
||||
char progress[64];
|
||||
TCHAR progress[64];
|
||||
int input_len_total;
|
||||
DWORD ltc = GetTickCount(), tc;
|
||||
|
||||
|
@ -400,7 +405,7 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
|
|||
tc = GetTickCount();
|
||||
if (g_exec_flags.status_update & 1 && (tc - ltc > 200 || !input_len))
|
||||
{
|
||||
wsprintf(progress, "... %d%%", MulDiv(input_len_total - input_len, 100, input_len_total));
|
||||
wsprintf(progress, _T("... %d%%"), MulDiv(input_len_total - input_len, 100, input_len_total));
|
||||
update_status_text(0, progress);
|
||||
ltc = tc;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/13/2007
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
@ -271,7 +273,7 @@ enum {
|
|||
|
||||
// nsis strings
|
||||
|
||||
typedef char NSIS_STRING[NSIS_MAX_STRLEN];
|
||||
typedef TCHAR NSIS_STRING[NSIS_MAX_STRLEN];
|
||||
|
||||
// Settings common to both installers and uninstallers
|
||||
typedef struct
|
||||
|
@ -333,7 +335,7 @@ typedef struct
|
|||
int str_uninstcmd;
|
||||
#endif//NSIS_CONFIG_UNINSTALL_SUPPORT
|
||||
#ifdef NSIS_SUPPORT_MOVEONREBOOT
|
||||
int str_wininit;
|
||||
int str_wininit; // Points to the path of wininit.ini
|
||||
#endif//NSIS_SUPPORT_MOVEONREBOOT
|
||||
} header;
|
||||
|
||||
|
@ -376,18 +378,22 @@ typedef struct
|
|||
int name_ptr; // initial name pointer
|
||||
int install_types; // bits set for each of the different install_types, if any.
|
||||
int flags; // SF_* - defined above
|
||||
int code;
|
||||
int code_size;
|
||||
// for labels, it looks like it's only used to track how often it is used.
|
||||
int code; // The "address" of the start of the code in count of struct entries.
|
||||
int code_size; // The size of the code in num of entries?
|
||||
int size_kb;
|
||||
char name[NSIS_MAX_STRLEN]; // '' for invisible sections
|
||||
TCHAR name[NSIS_MAX_STRLEN]; // '' for invisible sections
|
||||
} section;
|
||||
|
||||
#define SECTION_OFFSET(field) (FIELD_OFFSET(section, field)/sizeof(int))
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int which;
|
||||
int which; // EW_* enum. Look at the enum values to see what offsets mean.
|
||||
int offsets[MAX_ENTRY_OFFSETS]; // count and meaning of offsets depend on 'which'
|
||||
// sometimes they are just straight int values or bool
|
||||
// values and sometimes they are indices into string
|
||||
// tables.
|
||||
} entry;
|
||||
|
||||
// page window proc
|
||||
|
@ -478,8 +484,10 @@ typedef struct {
|
|||
#define NS_LANG_CODE 255
|
||||
#define NS_CODES_START NS_SKIP_CODE
|
||||
|
||||
// We are doing this to store an integer value into a char string and we
|
||||
// don't want false end of string values so we shift then OR with 0x8080
|
||||
#define CODE_SHORT(x) (WORD)((((WORD)(x) & 0x7F) | (((WORD)(x) & 0x3F80) << 1) | 0x8080))
|
||||
#define MAX_CODED 16383
|
||||
#define MAX_CODED 16383 // 0x3FFF
|
||||
|
||||
#define NSIS_INSTDIR_INVALID 1
|
||||
#define NSIS_INSTDIR_NOT_ENOUGH_SPACE 2
|
||||
|
@ -496,7 +504,7 @@ int NSISCALL isheader(firstheader *h); // returns 0 on not header, length_of_dat
|
|||
// returns 0 on success
|
||||
// on success, m_header will be set to a pointer that should eventually be GlobalFree()'d.
|
||||
// (or m_uninstheader)
|
||||
const char * NSISCALL loadHeaders(int cl_flags);
|
||||
const TCHAR * NSISCALL loadHeaders(int cl_flags);
|
||||
|
||||
int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen);
|
||||
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/13/2007
|
||||
*/
|
||||
|
||||
#ifndef _NSIS_LANG_H_
|
||||
|
@ -19,24 +21,27 @@
|
|||
|
||||
|
||||
// generic startup strings (these will never be overridable)
|
||||
#define _LANG_INVALIDCRC "Installer integrity check has failed. Common causes include\n" \
|
||||
"incomplete download and damaged media. Contact the\n" \
|
||||
"installer's author to obtain a new copy.\n\n" \
|
||||
"More information at:\n" \
|
||||
"http://nsis.sf.net/NSIS_Error"
|
||||
#define _LANG_INVALIDCRC _T("Installer integrity check has failed. Common causes include\n") \
|
||||
_T("incomplete download and damaged media. Contact the\n") \
|
||||
_T("installer's author to obtain a new copy.\n\n") \
|
||||
_T("More information at:\n") \
|
||||
_T("http://nsis.sf.net/NSIS_Error")
|
||||
|
||||
#define _LANG_ERRORWRITINGTEMP "Error writing temporary file. Make sure your temp folder is valid."
|
||||
#define _LANG_ERRORWRITINGTEMP _T("Error writing temporary file. Make sure your temp folder is valid.")
|
||||
|
||||
#define _LANG_UNINSTINITERROR "Error launching installer"
|
||||
#define _LANG_UNINSTINITERROR _T("Error launching installer")
|
||||
|
||||
#define _LANG_VERIFYINGINST "verifying installer: %d%%"
|
||||
#define _LANG_VERIFYINGINST _T("verifying installer: %d%%")
|
||||
|
||||
#define _LANG_UNPACKING "unpacking data: %d%%"
|
||||
#define _LANG_UNPACKING _T("unpacking data: %d%%")
|
||||
|
||||
#define _LANG_CANTOPENSELF "Error launching installer" // same as uninstiniterror for size
|
||||
#define _LANG_CANTOPENSELF _T("Error launching installer") // same as uninstiniterror for size
|
||||
|
||||
#define _LANG_GENERIC_ERROR "NSIS Error"
|
||||
#define _LANG_GENERIC_ERROR _T("NSIS Error")
|
||||
|
||||
// We store index to the current language table as a negative
|
||||
// index value - 1. So this macro, undoes that into a valid
|
||||
// index.
|
||||
#define LANG_STR_TAB(x) cur_langtable[-((int)x+1)]
|
||||
|
||||
#define LANG_BRANDING -1
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/22/2007
|
||||
*/
|
||||
|
||||
#include "fileform.h"
|
||||
|
@ -31,7 +33,7 @@ extern NSIS_STRING g_usrvars[1];
|
|||
#define state_exe_file g_usrvars[28]
|
||||
#define state_click_next g_usrvars[30]
|
||||
|
||||
extern char g_caption[NSIS_MAX_STRLEN*2];
|
||||
extern TCHAR g_caption[NSIS_MAX_STRLEN*2];
|
||||
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
extern HWND g_hwnd;
|
||||
extern HANDLE g_hInstance;
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/13/2007
|
||||
*/
|
||||
|
||||
|
||||
|
@ -21,7 +23,7 @@
|
|||
extern int *cur_langtable;
|
||||
|
||||
extern int NSISCALL ui_doinstall(void);
|
||||
void NSISCALL update_status_text(int strtab, const char *text2);
|
||||
void NSISCALL update_status_text(int strtab, const TCHAR *text2);
|
||||
|
||||
extern int ui_dlg_visible;
|
||||
extern HWND m_curwnd;
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 08/11/2007
|
||||
*/
|
||||
|
||||
#include "../Platform.h"
|
||||
|
@ -24,10 +26,11 @@
|
|||
#include "exec.h"
|
||||
#include "ui.h"
|
||||
#include "resource.h"
|
||||
#include "../tchar.h"
|
||||
|
||||
#ifdef NSIS_CONFIG_LOG
|
||||
#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT)
|
||||
char g_log_file[1024];
|
||||
TCHAR g_log_file[1024];
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -50,7 +53,7 @@ NSIS_STRING g_usrvars[1] __attribute__((section (NSIS_VARS_SECTION)));
|
|||
# endif
|
||||
#endif
|
||||
|
||||
HANDLE NSISCALL myCreateProcess(char *cmd)
|
||||
HANDLE NSISCALL myCreateProcess(TCHAR *cmd)
|
||||
{
|
||||
PROCESS_INFORMATION ProcInfo;
|
||||
static STARTUPINFO StartUp;
|
||||
|
@ -61,25 +64,25 @@ HANDLE NSISCALL myCreateProcess(char *cmd)
|
|||
return ProcInfo.hProcess;
|
||||
}
|
||||
|
||||
/*BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val)
|
||||
/*BOOL NSISCALL my_SetWindowText(HWND hWnd, const TCHAR *val)
|
||||
{
|
||||
return SendMessage(hWnd,WM_SETTEXT,0,(LPARAM)val);
|
||||
}*/
|
||||
|
||||
BOOL NSISCALL my_SetDialogItemText(HWND dlg, UINT idx, const char *val)
|
||||
BOOL NSISCALL my_SetDialogItemText(HWND dlg, UINT idx, const TCHAR *val)
|
||||
{
|
||||
return SetDlgItemText(dlg,idx,val);
|
||||
// return my_SetWindowText(GetDlgItem(dlg, idx), val);
|
||||
}
|
||||
|
||||
int NSISCALL my_GetDialogItemText(UINT idx, char *val)
|
||||
int NSISCALL my_GetDialogItemText(UINT idx, TCHAR *val)
|
||||
{
|
||||
extern HWND m_curwnd;
|
||||
return GetDlgItemText(m_curwnd, idx, val, NSIS_MAX_STRLEN);
|
||||
// return my_GetWindowText(GetDlgItem(m_curwnd, idx), val, NSIS_MAX_STRLEN);
|
||||
}
|
||||
|
||||
int NSISCALL my_MessageBox(const char *text, UINT type) {
|
||||
int NSISCALL my_MessageBox(const TCHAR *text, UINT type) {
|
||||
int _type = type & 0x001FFFFF;
|
||||
static MSGBOXPARAMS mbp = {
|
||||
sizeof(MSGBOXPARAMS),
|
||||
|
@ -112,13 +115,13 @@ int NSISCALL my_MessageBox(const char *text, UINT type) {
|
|||
return MessageBoxIndirect(&mbp);
|
||||
}
|
||||
|
||||
void NSISCALL myDelete(char *buf, int flags)
|
||||
void NSISCALL myDelete(TCHAR *buf, int flags)
|
||||
{
|
||||
static char lbuf[NSIS_MAX_STRLEN];
|
||||
static TCHAR lbuf[NSIS_MAX_STRLEN];
|
||||
|
||||
HANDLE h;
|
||||
WIN32_FIND_DATA fd;
|
||||
char *fn;
|
||||
TCHAR *fn;
|
||||
int valid_dir=is_valid_instpath(buf);
|
||||
|
||||
if ((flags & DEL_SIMPLE))
|
||||
|
@ -134,14 +137,14 @@ void NSISCALL myDelete(char *buf, int flags)
|
|||
mystrcpy(lbuf,buf);
|
||||
#ifdef NSIS_SUPPORT_RMDIR
|
||||
if (flags & DEL_DIR)
|
||||
mystrcat(lbuf,"\\*.*");
|
||||
mystrcat(lbuf,_T("\\*.*"));
|
||||
else
|
||||
#endif//NSIS_SUPPORT_RMDIR
|
||||
trimslashtoend(buf);
|
||||
|
||||
// only append backslash if the path isn't relative to the working directory [bug #1851273]
|
||||
if (*buf || *lbuf == '\\')
|
||||
mystrcat(buf,"\\");
|
||||
if (*buf || *lbuf == _T('\\'))
|
||||
mystrcat(buf,_T("\\"));
|
||||
|
||||
fn=buf+mystrlen(buf);
|
||||
|
||||
|
@ -150,14 +153,14 @@ void NSISCALL myDelete(char *buf, int flags)
|
|||
{
|
||||
do
|
||||
{
|
||||
char *fdfn = fd.cFileName;
|
||||
if (*findchar(fdfn, '?') && *fd.cAlternateFileName)
|
||||
TCHAR *fdfn = fd.cFileName;
|
||||
if (*findchar(fdfn, _T('?')) && *fd.cAlternateFileName)
|
||||
// name contains unicode, use short name
|
||||
fdfn = fd.cAlternateFileName;
|
||||
|
||||
#ifdef NSIS_SUPPORT_RMDIR
|
||||
if (fdfn[0] == '.' && !fdfn[1]) continue;
|
||||
if (fdfn[0] == '.' && fdfn[1] == '.' && !fdfn[2]) continue;
|
||||
if (fdfn[0] == _T('.') && !fdfn[1]) continue;
|
||||
if (fdfn[0] == _T('.') && fdfn[1] == _T('.') && !fdfn[2]) continue;
|
||||
#endif//NSIS_SUPPORT_RMDIR
|
||||
{
|
||||
mystrcpy(fn,fdfn);
|
||||
|
@ -172,21 +175,21 @@ void NSISCALL myDelete(char *buf, int flags)
|
|||
}
|
||||
else
|
||||
{
|
||||
log_printf2("Delete: DeleteFile(\"%s\")",buf);
|
||||
log_printf2(_T("Delete: DeleteFile(\"%s\")"),buf);
|
||||
remove_ro_attr(buf);
|
||||
if (!DeleteFile(buf))
|
||||
{
|
||||
#ifdef NSIS_SUPPORT_MOVEONREBOOT
|
||||
if (flags & DEL_REBOOT)
|
||||
{
|
||||
log_printf2("Delete: DeleteFile on Reboot(\"%s\")",buf);
|
||||
log_printf2(_T("Delete: DeleteFile on Reboot(\"%s\")"),buf);
|
||||
update_status_text(LANG_DELETEONREBOOT,buf);
|
||||
MoveFileOnReboot(buf,NULL);
|
||||
}
|
||||
else
|
||||
#endif//NSIS_SUPPORT_MOVEONREBOOT
|
||||
{
|
||||
log_printf2("Delete: DeleteFile failed(\"%s\")",buf);
|
||||
log_printf2(_T("Delete: DeleteFile failed(\"%s\")"),buf);
|
||||
g_exec_flags.exec_error++;
|
||||
}
|
||||
}
|
||||
|
@ -209,27 +212,27 @@ void NSISCALL myDelete(char *buf, int flags)
|
|||
{
|
||||
if (!valid_dir)
|
||||
{
|
||||
log_printf2("RMDir: RemoveDirectory invalid input(\"%s\")",buf);
|
||||
log_printf2(_T("RMDir: RemoveDirectory invalid input(\"%s\")"),buf);
|
||||
g_exec_flags.exec_error++;
|
||||
}
|
||||
else if (file_exists(buf))
|
||||
{
|
||||
addtrailingslash(buf);
|
||||
log_printf2("RMDir: RemoveDirectory(\"%s\")",buf);
|
||||
log_printf2(_T("RMDir: RemoveDirectory(\"%s\")"),buf);
|
||||
remove_ro_attr(buf);
|
||||
if (!RemoveDirectory(buf))
|
||||
{
|
||||
#ifdef NSIS_SUPPORT_MOVEONREBOOT
|
||||
if (flags & DEL_REBOOT)
|
||||
{
|
||||
log_printf2("RMDir: RemoveDirectory on Reboot(\"%s\")",buf);
|
||||
log_printf2(_T("RMDir: RemoveDirectory on Reboot(\"%s\")"),buf);
|
||||
update_status_text(LANG_DELETEONREBOOT,buf);
|
||||
MoveFileOnReboot(buf,NULL);
|
||||
}
|
||||
else
|
||||
#endif//NSIS_SUPPORT_MOVEONREBOOT
|
||||
{
|
||||
log_printf2("RMDir: RemoveDirectory failed(\"%s\")",buf);
|
||||
log_printf2(_T("RMDir: RemoveDirectory failed(\"%s\")"),buf);
|
||||
g_exec_flags.exec_error++;
|
||||
}
|
||||
}
|
||||
|
@ -242,9 +245,9 @@ void NSISCALL myDelete(char *buf, int flags)
|
|||
#endif//NSIS_SUPPORT_RMDIR
|
||||
}
|
||||
|
||||
char *NSISCALL addtrailingslash(char *str)
|
||||
TCHAR *NSISCALL addtrailingslash(TCHAR *str)
|
||||
{
|
||||
if (lastchar(str)!='\\') mystrcat(str,"\\");
|
||||
if (lastchar(str)!=_T('\\')) mystrcat(str,_T("\\"));
|
||||
return str;
|
||||
}
|
||||
|
||||
|
@ -253,7 +256,7 @@ char *NSISCALL addtrailingslash(char *str)
|
|||
return *CharPrev(str,str+mystrlen(str));
|
||||
}*/
|
||||
|
||||
char * NSISCALL findchar(char *str, char c)
|
||||
TCHAR * NSISCALL findchar(TCHAR *str, TCHAR c)
|
||||
{
|
||||
while (*str && *str != c)
|
||||
{
|
||||
|
@ -262,12 +265,14 @@ char * NSISCALL findchar(char *str, char c)
|
|||
return str;
|
||||
}
|
||||
|
||||
char * NSISCALL trimslashtoend(char *buf)
|
||||
// Separates a full path to the directory portion and file name portion
|
||||
// and returns the pointer to the filename portion.
|
||||
TCHAR * NSISCALL trimslashtoend(TCHAR *buf)
|
||||
{
|
||||
char *p = buf + mystrlen(buf);
|
||||
TCHAR *p = buf + mystrlen(buf);
|
||||
do
|
||||
{
|
||||
if (*p == '\\')
|
||||
if (*p == _T('\\'))
|
||||
break;
|
||||
p = CharPrev(buf, p);
|
||||
} while (p > buf);
|
||||
|
@ -277,28 +282,28 @@ char * NSISCALL trimslashtoend(char *buf)
|
|||
return p + 1;
|
||||
}
|
||||
|
||||
int NSISCALL validpathspec(char *ubuf)
|
||||
int NSISCALL validpathspec(TCHAR *ubuf)
|
||||
{
|
||||
char dl = ubuf[0] | 0x20; // convert alleged drive letter to lower case
|
||||
return ((*(WORD*)ubuf==CHAR2_TO_WORD('\\','\\')) || (dl >= 'a' && dl <= 'z' && ubuf[1]==':'));
|
||||
TCHAR dl = ubuf[0] | 0x20; // convert alleged drive letter to lower case
|
||||
return ((*(WORD*)ubuf==CHAR2_TO_WORD(_T('\\'),_T('\\'))) || (dl >= _T('a') && dl <= _T('z') && ubuf[1]==_T(':')));
|
||||
}
|
||||
|
||||
char * NSISCALL skip_root(char *path)
|
||||
TCHAR * NSISCALL skip_root(TCHAR *path)
|
||||
{
|
||||
char *p = CharNext(path);
|
||||
char *p2 = CharNext(p);
|
||||
TCHAR *p = CharNext(path);
|
||||
TCHAR *p2 = CharNext(p);
|
||||
|
||||
if (*path && *(WORD*)p == CHAR2_TO_WORD(':', '\\'))
|
||||
if (*path && *(WORD*)p == CHAR2_TO_WORD(_T(':'), _T('\\')))
|
||||
{
|
||||
return CharNext(p2);
|
||||
}
|
||||
else if (*(WORD*)path == CHAR2_TO_WORD('\\','\\'))
|
||||
else if (*(WORD*)path == CHAR2_TO_WORD(_T('\\'),_T('\\')))
|
||||
{
|
||||
// skip host and share name
|
||||
int x = 2;
|
||||
while (x--)
|
||||
{
|
||||
p2 = findchar(p2, '\\');
|
||||
p2 = findchar(p2, _T('\\'));
|
||||
if (!*p2)
|
||||
return NULL;
|
||||
p2++; // skip backslash
|
||||
|
@ -310,10 +315,10 @@ char * NSISCALL skip_root(char *path)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int NSISCALL is_valid_instpath(char *s)
|
||||
int NSISCALL is_valid_instpath(TCHAR *s)
|
||||
{
|
||||
static char tmp[NSIS_MAX_STRLEN];
|
||||
char *root;
|
||||
static TCHAR tmp[NSIS_MAX_STRLEN];
|
||||
TCHAR *root;
|
||||
|
||||
mystrcpy(tmp, s);
|
||||
|
||||
|
@ -330,7 +335,7 @@ int NSISCALL is_valid_instpath(char *s)
|
|||
// not pass as a valid non-root directory.
|
||||
validate_filename(root);
|
||||
|
||||
if ((g_flags & CH_FLAGS_NO_ROOT_DIR) && (!*root || *root == '\\'))
|
||||
if ((g_flags & CH_FLAGS_NO_ROOT_DIR) && (!*root || *root == _T('\\')))
|
||||
return 0;
|
||||
|
||||
while (mystrlen(tmp) > root - tmp)
|
||||
|
@ -352,12 +357,12 @@ int NSISCALL is_valid_instpath(char *s)
|
|||
return 1;
|
||||
}
|
||||
|
||||
char * NSISCALL mystrstri(char *a, const char *b)
|
||||
TCHAR * NSISCALL mystrstri(TCHAR *a, const TCHAR *b)
|
||||
{
|
||||
int l = mystrlen(b);
|
||||
while (mystrlen(a) >= l)
|
||||
{
|
||||
char c = a[l];
|
||||
TCHAR c = a[l];
|
||||
a[l] = 0;
|
||||
if (!lstrcmpi(a, b))
|
||||
{
|
||||
|
@ -370,6 +375,8 @@ char * NSISCALL mystrstri(char *a, const char *b)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
// mini_memcpy takes the number of bytes to copy.
|
||||
void NSISCALL mini_memcpy(void *out, const void *in, int len)
|
||||
{
|
||||
char *c_out=(char*)out;
|
||||
|
@ -380,14 +387,14 @@ void NSISCALL mini_memcpy(void *out, const void *in, int len)
|
|||
}
|
||||
}
|
||||
|
||||
void NSISCALL remove_ro_attr(char *file)
|
||||
void NSISCALL remove_ro_attr(TCHAR *file)
|
||||
{
|
||||
int attr = GetFileAttributes(file);
|
||||
if (attr != INVALID_FILE_ATTRIBUTES)
|
||||
SetFileAttributes(file,attr&(~FILE_ATTRIBUTE_READONLY));
|
||||
}
|
||||
|
||||
HANDLE NSISCALL myOpenFile(const char *fn, DWORD da, DWORD cd)
|
||||
HANDLE NSISCALL myOpenFile(const TCHAR *fn, DWORD da, DWORD cd)
|
||||
{
|
||||
int attr = GetFileAttributes(fn);
|
||||
return CreateFile(
|
||||
|
@ -401,14 +408,14 @@ HANDLE NSISCALL myOpenFile(const char *fn, DWORD da, DWORD cd)
|
|||
);
|
||||
}
|
||||
|
||||
char * NSISCALL my_GetTempFileName(char *buf, const char *dir)
|
||||
TCHAR * NSISCALL my_GetTempFileName(TCHAR *buf, const TCHAR *dir)
|
||||
{
|
||||
int n = 100;
|
||||
while (n--)
|
||||
{
|
||||
char prefix[4];
|
||||
*(LPDWORD)prefix = CHAR4_TO_DWORD('n', 's', 'a', 0);
|
||||
prefix[2] += (char)(GetTickCount() % 26);
|
||||
TCHAR prefix[4];
|
||||
*(LPDWORD)prefix = CHAR4_TO_DWORD(_T('n'), _T('s'), _T('a'), 0);
|
||||
prefix[2] += (TCHAR)(GetTickCount() % 26);
|
||||
if (GetTempFileName(dir, prefix, 0, buf))
|
||||
return buf;
|
||||
}
|
||||
|
@ -420,9 +427,9 @@ char * NSISCALL my_GetTempFileName(char *buf, const char *dir)
|
|||
void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
||||
{
|
||||
BOOL fOk = 0;
|
||||
typedef BOOL (WINAPI *mfea_t)(LPCSTR lpExistingFileName,LPCSTR lpNewFileName,DWORD dwFlags);
|
||||
typedef BOOL (WINAPI *mfea_t)(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,DWORD dwFlags);
|
||||
mfea_t mfea;
|
||||
mfea=(mfea_t) myGetProcAddress(MGA_MoveFileExA);
|
||||
mfea=(mfea_t) myGetProcAddress(MGA_MoveFileEx);
|
||||
if (mfea)
|
||||
{
|
||||
fOk=mfea(pszExisting, pszNew, MOVEFILE_DELAY_UNTIL_REBOOT|MOVEFILE_REPLACE_EXISTING);
|
||||
|
@ -430,20 +437,20 @@ void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
|||
|
||||
if (!fOk)
|
||||
{
|
||||
static char szRenameLine[1024];
|
||||
static char wininit[1024];
|
||||
static char tmpbuf[1024];
|
||||
static TCHAR szRenameLine[1024];
|
||||
static TCHAR wininit[1024];
|
||||
static TCHAR tmpbuf[1024];
|
||||
int cchRenameLine;
|
||||
static const char szRenameSec[] = "[Rename]\r\n";
|
||||
static const TCHAR szRenameSec[] = _T("[Rename]\r\n");
|
||||
HANDLE hfile;
|
||||
DWORD dwFileSize;
|
||||
DWORD dwBytes;
|
||||
DWORD dwRenameLinePos;
|
||||
char *pszWinInit;
|
||||
TCHAR *pszWinInit;
|
||||
|
||||
int spn;
|
||||
|
||||
*(DWORD*)tmpbuf = CHAR4_TO_DWORD('N', 'U', 'L', 0);
|
||||
*(DWORD*)tmpbuf = CHAR4_TO_DWORD(_T('N'), _T('U'), _T('L'), 0);
|
||||
|
||||
if (pszNew) {
|
||||
// create the file if it's not already there to prevent GetShortPathName from failing
|
||||
|
@ -456,7 +463,7 @@ void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
|||
spn = GetShortPathName(pszExisting,wininit,1024);
|
||||
if (!spn || spn > 1024)
|
||||
return;
|
||||
cchRenameLine = wsprintf(szRenameLine,"%s=%s\r\n",tmpbuf,wininit);
|
||||
cchRenameLine = wsprintf(szRenameLine,_T("%s=%s\r\n"),tmpbuf,wininit);
|
||||
|
||||
GetNSISString(wininit, g_header->str_wininit);
|
||||
hfile = myOpenFile(wininit, GENERIC_READ | GENERIC_WRITE, OPEN_ALWAYS);
|
||||
|
@ -470,7 +477,7 @@ void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
|||
{
|
||||
if (ReadFile(hfile, pszWinInit, dwFileSize, &dwBytes, NULL) && dwFileSize == dwBytes)
|
||||
{
|
||||
LPSTR pszRenameSecInFile = mystrstri(pszWinInit, szRenameSec);
|
||||
LPTSTR pszRenameSecInFile = mystrstri(pszWinInit, szRenameSec);
|
||||
if (pszRenameSecInFile == NULL)
|
||||
{
|
||||
mystrcpy(pszWinInit+dwFileSize, szRenameSec);
|
||||
|
@ -479,11 +486,11 @@ void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
|||
}
|
||||
else
|
||||
{
|
||||
char *pszFirstRenameLine = pszRenameSecInFile+10;
|
||||
char *pszNextSec = mystrstri(pszFirstRenameLine,"\n[");
|
||||
TCHAR *pszFirstRenameLine = pszRenameSecInFile+10;
|
||||
TCHAR *pszNextSec = mystrstri(pszFirstRenameLine,_T("\n["));
|
||||
if (pszNextSec)
|
||||
{
|
||||
char *p = ++pszNextSec;
|
||||
TCHAR *p = ++pszNextSec;
|
||||
while (p < pszWinInit + dwFileSize) {
|
||||
p[cchRenameLine] = *p;
|
||||
p++;
|
||||
|
@ -515,48 +522,52 @@ void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
|||
}
|
||||
#endif
|
||||
|
||||
void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out, int x64)
|
||||
// The value of registry->sub->name is stored in out. If failure, then out becomes
|
||||
// an empty string "".
|
||||
void NSISCALL myRegGetStr(HKEY root, const TCHAR *sub, const TCHAR *name, TCHAR *out, int x64)
|
||||
{
|
||||
HKEY hKey;
|
||||
*out=0;
|
||||
if (RegOpenKeyEx(root,sub,0,KEY_READ|(x64?KEY_WOW64_64KEY:0),&hKey) == ERROR_SUCCESS)
|
||||
{
|
||||
DWORD l = NSIS_MAX_STRLEN;
|
||||
DWORD l = NSIS_MAX_STRLEN*sizeof(TCHAR);
|
||||
DWORD t;
|
||||
if (RegQueryValueEx(hKey,name,NULL,&t,out,&l ) != ERROR_SUCCESS || (t != REG_SZ && t != REG_EXPAND_SZ)) *out=0;
|
||||
// Note that RegQueryValueEx returns Unicode strings if _UNICODE is defined for the
|
||||
// REG_SZ type.
|
||||
if (RegQueryValueEx(hKey,name,NULL,&t,(LPBYTE)out,&l ) != ERROR_SUCCESS || (t != REG_SZ && t != REG_EXPAND_SZ)) *out=0;
|
||||
out[NSIS_MAX_STRLEN-1]=0;
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
|
||||
void NSISCALL myitoa(char *s, int d)
|
||||
void NSISCALL myitoa(TCHAR *s, int d)
|
||||
{
|
||||
static const char c[] = "%d";
|
||||
static const TCHAR c[] = _T("%d");
|
||||
wsprintf(s,c,d);
|
||||
}
|
||||
|
||||
int NSISCALL myatoi(char *s)
|
||||
int NSISCALL myatoi(TCHAR *s)
|
||||
{
|
||||
unsigned int v=0;
|
||||
int sign=1; // sign of positive
|
||||
char m=10; // base of 10
|
||||
char t='9'; // cap top of numbers at 9
|
||||
TCHAR m=10; // base of 10
|
||||
TCHAR t=_T('9'); // cap top of numbers at 9
|
||||
|
||||
if (*s == '-')
|
||||
if (*s == _T('-'))
|
||||
{
|
||||
s++; //skip over -
|
||||
sign=-1; // sign flip
|
||||
}
|
||||
|
||||
if (*s == '0')
|
||||
if (*s == _T('0'))
|
||||
{
|
||||
s++; // skip over 0
|
||||
if (s[0] >= '0' && s[0] <= '7')
|
||||
if (s[0] >= _T('0') && s[0] <= _T('7'))
|
||||
{
|
||||
m=8; // base of 8
|
||||
t='7'; // cap top at 7
|
||||
t=_T('7'); // cap top at 7
|
||||
}
|
||||
if ((s[0] & ~0x20) == 'X')
|
||||
if ((s[0] & ~0x20) == _T('X'))
|
||||
{
|
||||
m=16; // base of 16
|
||||
s++; // advance over 'x'
|
||||
|
@ -566,8 +577,9 @@ int NSISCALL myatoi(char *s)
|
|||
for (;;)
|
||||
{
|
||||
int c=*s++;
|
||||
if (c >= '0' && c <= t) c-='0';
|
||||
else if (m==16 && (c & ~0x20) >= 'A' && (c & ~0x20) <= 'F') c = (c & 7) + 9;
|
||||
if (c >= _T('0') && c <= t) c-=_T('0');
|
||||
// clever little trick to do both upper and lowercase A-F.
|
||||
else if (m==16 && (c & ~0x20) >= _T('A') && (c & ~0x20) <= _T('F')) c = (c & 7) + 9;
|
||||
else break;
|
||||
v*=m;
|
||||
v+=c;
|
||||
|
@ -578,34 +590,38 @@ int NSISCALL myatoi(char *s)
|
|||
// 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 * NSISCALL mystrcpy(char *out, const char *in)
|
||||
TCHAR * NSISCALL mystrcpy(TCHAR *out, const TCHAR *in)
|
||||
{
|
||||
return lstrcpyn(out, in, NSIS_MAX_STRLEN);
|
||||
}
|
||||
|
||||
int NSISCALL mystrlen(const char *in)
|
||||
int NSISCALL mystrlen(const TCHAR *in)
|
||||
{
|
||||
return lstrlen(in);
|
||||
}
|
||||
|
||||
char * NSISCALL mystrcat(char *out, const char *concat)
|
||||
TCHAR * NSISCALL mystrcat(TCHAR *out, const TCHAR *concat)
|
||||
{
|
||||
return lstrcat(out, concat);
|
||||
}
|
||||
|
||||
char ps_tmpbuf[NSIS_MAX_STRLEN*2];
|
||||
TCHAR ps_tmpbuf[NSIS_MAX_STRLEN*2];
|
||||
|
||||
const char SYSREGKEY[] = "Software\\Microsoft\\Windows\\CurrentVersion";
|
||||
const char QUICKLAUNCH[] = "\\Microsoft\\Internet Explorer\\Quick Launch";
|
||||
const TCHAR SYSREGKEY[] = _T("Software\\Microsoft\\Windows\\CurrentVersion");
|
||||
const TCHAR QUICKLAUNCH[] = _T("\\Microsoft\\Internet Explorer\\Quick Launch");
|
||||
|
||||
typedef HRESULT (__stdcall * PFNSHGETFOLDERPATHA)(HWND, int, HANDLE, DWORD, LPSTR);
|
||||
typedef HRESULT (__stdcall * PFNSHGETFOLDERPATH)(HWND, int, HANDLE, DWORD, LPTSTR);
|
||||
extern void *g_SHGetFolderPath;
|
||||
|
||||
// Based on Dave Laundon's simplified process_string
|
||||
char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
||||
// The string actually has a lot of different data encoded into it. This
|
||||
// function extracts the special data out and puts it into outbuf.
|
||||
TCHAR * NSISCALL GetNSISString(TCHAR *outbuf, int strtab)
|
||||
{
|
||||
char *in = (char*)GetNSISStringNP(GetNSISTab(strtab));
|
||||
char *out = ps_tmpbuf;
|
||||
// This looks at the g_block (copied from header->blocks) and
|
||||
// indexes into the language
|
||||
TCHAR *in = (TCHAR*)GetNSISStringNP(GetNSISTab(strtab));
|
||||
TCHAR *out = ps_tmpbuf;
|
||||
if ((unsigned int) (outbuf - ps_tmpbuf) < sizeof(ps_tmpbuf))
|
||||
{
|
||||
out = outbuf;
|
||||
|
@ -613,7 +629,7 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
}
|
||||
while (*in && out - ps_tmpbuf < NSIS_MAX_STRLEN)
|
||||
{
|
||||
unsigned char nVarIdx = (unsigned char)*in++;
|
||||
_TUCHAR nVarIdx = (_TUCHAR)*in++;
|
||||
int nData;
|
||||
int fldrs[4];
|
||||
if (nVarIdx > NS_CODES_START)
|
||||
|
@ -623,7 +639,7 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
fldrs[1] = in[0];
|
||||
fldrs[2] = in[1] | CSIDL_FLAG_CREATE; // all users
|
||||
fldrs[3] = in[1];
|
||||
in += 2;
|
||||
in += sizeof(SHORT)/sizeof(TCHAR);
|
||||
|
||||
if (nVarIdx == NS_SHELL_CODE)
|
||||
{
|
||||
|
@ -689,7 +705,7 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
{
|
||||
if (g_SHGetFolderPath && use_shfolder)
|
||||
{
|
||||
PFNSHGETFOLDERPATHA SHGetFolderPathFunc = (PFNSHGETFOLDERPATHA) g_SHGetFolderPath;
|
||||
PFNSHGETFOLDERPATH SHGetFolderPathFunc = (PFNSHGETFOLDERPATH) g_SHGetFolderPath;
|
||||
if (!SHGetFolderPathFunc(g_hwnd, fldrs[x], NULL, SHGFP_TYPE_CURRENT, out))
|
||||
{
|
||||
break;
|
||||
|
@ -751,15 +767,15 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
return ps_tmpbuf;
|
||||
}
|
||||
|
||||
void NSISCALL validate_filename(char *in) {
|
||||
char *nono = "*?|<>/\":";
|
||||
char *out;
|
||||
char *out_save;
|
||||
void NSISCALL validate_filename(TCHAR *in) {
|
||||
TCHAR *nono = _T("*?|<>/\":");
|
||||
TCHAR *out;
|
||||
TCHAR *out_save;
|
||||
|
||||
// ignoring spaces is wrong, " C:\blah" is invalid
|
||||
//while (*in == ' ') in = CharNext(in);
|
||||
// ignoring spaces is wrong, _T(" C:\blah") is invalid
|
||||
//while (*in == _T(' ')) in = CharNext(in);
|
||||
|
||||
if (in[0] == '\\' && in[1] == '\\' && in[2] == '?' && in[3] == '\\')
|
||||
if (in[0] == _T('\\') && in[1] == _T('\\') && in[2] == _T('?') && in[3] == _T('\\'))
|
||||
{
|
||||
// at least four bytes
|
||||
in += 4;
|
||||
|
@ -772,7 +788,7 @@ void NSISCALL validate_filename(char *in) {
|
|||
out = out_save = in;
|
||||
while (*in)
|
||||
{
|
||||
if ((unsigned char)*in > 31 && !*findchar(nono, *in))
|
||||
if ((_TUCHAR)*in > 31 && !*findchar(nono, *in))
|
||||
{
|
||||
mini_memcpy(out, in, CharNext(in) - in);
|
||||
out = CharNext(out);
|
||||
|
@ -783,7 +799,7 @@ void NSISCALL validate_filename(char *in) {
|
|||
do
|
||||
{
|
||||
out = CharPrev(out_save, out);
|
||||
if (*out == ' ' || *out == '\\')
|
||||
if (*out == _T(' ') || *out == _T('\\'))
|
||||
*out = 0;
|
||||
else
|
||||
break;
|
||||
|
@ -792,7 +808,7 @@ void NSISCALL validate_filename(char *in) {
|
|||
|
||||
#ifdef NSIS_CONFIG_LOG
|
||||
int log_dolog;
|
||||
char log_text[2048]; // 1024 for each wsprintf
|
||||
TCHAR log_text[2048]; // 1024 for each wsprintf
|
||||
|
||||
#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT)
|
||||
void NSISCALL log_write(int close)
|
||||
|
@ -818,36 +834,36 @@ void NSISCALL log_write(int close)
|
|||
if (fp!=INVALID_HANDLE_VALUE)
|
||||
{
|
||||
DWORD d;
|
||||
mystrcat(log_text,"\r\n");
|
||||
WriteFile(fp,log_text,mystrlen(log_text),&d,NULL);
|
||||
mystrcat(log_text,_T("\r\n"));
|
||||
WriteFile(fp,log_text,mystrlen(log_text)*sizeof(TCHAR),&d,NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif//!NSIS_CONFIG_LOG_ODS && !NSIS_CONFIG_LOG_STDOUT
|
||||
|
||||
const char * _RegKeyHandleToName(HKEY hKey)
|
||||
const TCHAR * _RegKeyHandleToName(HKEY hKey)
|
||||
{
|
||||
if (hKey == HKEY_CLASSES_ROOT)
|
||||
return "HKEY_CLASSES_ROOT";
|
||||
return _T("HKEY_CLASSES_ROOT");
|
||||
else if (hKey == HKEY_CURRENT_USER)
|
||||
return "HKEY_CURRENT_USER";
|
||||
return _T("HKEY_CURRENT_USER");
|
||||
else if (hKey == HKEY_LOCAL_MACHINE)
|
||||
return "HKEY_LOCAL_MACHINE";
|
||||
return _T("HKEY_LOCAL_MACHINE");
|
||||
else if (hKey == HKEY_USERS)
|
||||
return "HKEY_USERS";
|
||||
return _T("HKEY_USERS");
|
||||
else if (hKey == HKEY_PERFORMANCE_DATA)
|
||||
return "HKEY_PERFORMANCE_DATA";
|
||||
return _T("HKEY_PERFORMANCE_DATA");
|
||||
else if (hKey == HKEY_CURRENT_CONFIG)
|
||||
return "HKEY_CURRENT_CONFIG";
|
||||
return _T("HKEY_CURRENT_CONFIG");
|
||||
else if (hKey == HKEY_DYN_DATA)
|
||||
return "HKEY_DYN_DATA";
|
||||
return _T("HKEY_DYN_DATA");
|
||||
else
|
||||
return "invalid registry key";
|
||||
return _T("invalid registry key");
|
||||
}
|
||||
|
||||
void _LogData2Hex(char *buf, size_t buflen, unsigned char *data, size_t datalen)
|
||||
void _LogData2Hex(TCHAR *buf, size_t buflen, BYTE *data, size_t datalen)
|
||||
{
|
||||
char *p = buf;
|
||||
TCHAR *p = buf;
|
||||
|
||||
size_t i;
|
||||
|
||||
|
@ -864,31 +880,31 @@ void _LogData2Hex(char *buf, size_t buflen, unsigned char *data, size_t datalen)
|
|||
|
||||
for (i = 0; i < bufbytes; i++)
|
||||
{
|
||||
wsprintf(p, "%02x%c", data[i], (i == bufbytes - 1) ? '\0' : ' ');
|
||||
wsprintf(p, _T("%02x%c"), data[i], (i == bufbytes - 1) ? _T('\0') : _T(' '));
|
||||
p += 3;
|
||||
}
|
||||
|
||||
if (dots)
|
||||
mystrcat(buf, "...");
|
||||
mystrcat(buf, _T("..."));
|
||||
}
|
||||
|
||||
#ifdef NSIS_CONFIG_LOG_TIMESTAMP
|
||||
void log_timestamp(char *buf)
|
||||
void log_timestamp(TCHAR *buf)
|
||||
{
|
||||
SYSTEMTIME st;
|
||||
GetLocalTime(&st);
|
||||
wsprintf(buf,"[%04hu/%02hu/%02hu %02hu:%02hu:%02hu] ", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
|
||||
wsprintf(buf,_T("[%04hu/%02hu/%02hu %02hu:%02hu:%02hu] "), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
|
||||
}
|
||||
#else
|
||||
# define log_timestamp(x)
|
||||
#endif//NSIS_CONFIG_LOG_TIMESTAMP
|
||||
|
||||
void log_printf(char *format, ...)
|
||||
void log_printf(TCHAR *format, ...)
|
||||
{
|
||||
va_list val;
|
||||
va_start(val,format);
|
||||
|
||||
log_text[0] = '\0';
|
||||
log_text[0] = _T('\0');
|
||||
log_timestamp(log_text);
|
||||
wvsprintf(log_text+mystrlen(log_text),format,val);
|
||||
|
||||
|
@ -902,7 +918,7 @@ void log_printf(char *format, ...)
|
|||
{
|
||||
DWORD dwBytes;
|
||||
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), log_text, lstrlen(log_text), &dwBytes, NULL);
|
||||
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), "\n", 1, &dwBytes, NULL);
|
||||
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), _T("\n"), 1, &dwBytes, NULL);
|
||||
}
|
||||
#endif
|
||||
#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT)
|
||||
|
@ -911,7 +927,8 @@ void log_printf(char *format, ...)
|
|||
}
|
||||
#endif//NSIS_CONFIG_LOG
|
||||
|
||||
WIN32_FIND_DATA * NSISCALL file_exists(char *buf)
|
||||
// Jim Park: This function is non-reentrant because of the static.
|
||||
WIN32_FIND_DATA * NSISCALL file_exists(TCHAR *buf)
|
||||
{
|
||||
HANDLE h;
|
||||
static WIN32_FIND_DATA fd;
|
||||
|
@ -924,6 +941,8 @@ WIN32_FIND_DATA * NSISCALL file_exists(char *buf)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// Jim Park: Keep these as chars since there's only ANSI version of
|
||||
// GetProcAddress.
|
||||
struct MGA_FUNC
|
||||
{
|
||||
const char *dll;
|
||||
|
@ -942,12 +961,20 @@ struct MGA_FUNC MGA_FUNCS[] = {
|
|||
{"SHFOLDER", "SHGetFolderPathA"}
|
||||
};
|
||||
|
||||
/**
|
||||
* Given a function enum, it will load the appropriate DLL and get the
|
||||
* process address of the function and return the pointer. It's up to
|
||||
* the caller to know how to call that function, however.
|
||||
*
|
||||
* @param func Enum value that indexes the MGA_FUNCS array.
|
||||
* @return Pointer to the function identified by the enum value.
|
||||
*/
|
||||
void * NSISCALL myGetProcAddress(const enum myGetProcAddressFunctions func)
|
||||
{
|
||||
const char *dll = MGA_FUNCS[func].dll;
|
||||
HMODULE hModule = GetModuleHandle(dll);
|
||||
HMODULE hModule = GetModuleHandleA(dll);
|
||||
if (!hModule)
|
||||
hModule = LoadLibrary(dll);
|
||||
hModule = LoadLibraryA(dll);
|
||||
if (!hModule)
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty.
|
||||
*
|
||||
* Unicode support by Jim Park -- 07/23/2007
|
||||
*/
|
||||
|
||||
#ifndef ___NSIS_UTIL_H___
|
||||
|
@ -21,36 +23,40 @@
|
|||
#include "config.h"
|
||||
#include <shlobj.h>
|
||||
|
||||
extern char ps_tmpbuf[NSIS_MAX_STRLEN*2];
|
||||
char * NSISCALL GetNSISString(char *outbuf, int strtab);
|
||||
extern TCHAR ps_tmpbuf[NSIS_MAX_STRLEN*2];
|
||||
TCHAR * NSISCALL GetNSISString(TCHAR *outbuf, int strtab);
|
||||
#define GetNSISStringTT(strtab) GetNSISString(0, (strtab))
|
||||
#define GetNSISStringNP(strtab) ((const char *)g_blocks[NB_STRINGS].offset+(strtab))
|
||||
#define GetNSISTab(strtab) (strtab < 0 ? LANG_STR_TAB(strtab) : strtab)
|
||||
void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out, int x64);
|
||||
int NSISCALL myatoi(char *s);
|
||||
void NSISCALL myitoa(char *s, int d);
|
||||
char * NSISCALL mystrcpy(char *out, const char *in);
|
||||
int NSISCALL mystrlen(const char *in);
|
||||
char * NSISCALL mystrcat(char *out, const char *concat);
|
||||
char * NSISCALL mystrstr(char *a, char *b);
|
||||
WIN32_FIND_DATA * NSISCALL file_exists(char *buf);
|
||||
char * NSISCALL my_GetTempFileName(char *buf, const char *dir);
|
||||
#define GetNSISStringNP(strtab) ((const TCHAR *)g_blocks[NB_STRINGS].offset+(strtab))
|
||||
|
||||
//BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val);
|
||||
// A negative string table index means it's a language string table, so we
|
||||
// use the LANG_STR_TAB() macro to decode it.
|
||||
#define GetNSISTab(strtab) (strtab < 0 ? LANG_STR_TAB(strtab) : strtab)
|
||||
|
||||
void NSISCALL myRegGetStr(HKEY root, const TCHAR *sub, const TCHAR *name, TCHAR *out, int x64);
|
||||
int NSISCALL myatoi(TCHAR *s);
|
||||
void NSISCALL myitoa(TCHAR *s, int d);
|
||||
TCHAR * NSISCALL mystrcpy(TCHAR *out, const TCHAR *in);
|
||||
int NSISCALL mystrlen(const TCHAR *in);
|
||||
TCHAR * NSISCALL mystrcat(TCHAR *out, const TCHAR *concat);
|
||||
TCHAR * NSISCALL mystrstr(TCHAR *a, TCHAR *b);
|
||||
WIN32_FIND_DATA * NSISCALL file_exists(TCHAR *buf);
|
||||
TCHAR * NSISCALL my_GetTempFileName(TCHAR *buf, const TCHAR *dir);
|
||||
|
||||
//BOOL NSISCALL my_SetWindowText(HWND hWnd, const TCHAR *val);
|
||||
#define my_SetWindowText SetWindowText
|
||||
BOOL NSISCALL my_SetDialogItemText(HWND dlg, UINT idx, const char *val);
|
||||
BOOL NSISCALL my_SetDialogItemText(HWND dlg, UINT idx, const TCHAR *val);
|
||||
//#define my_SetDialogItemText SetDlgItemText
|
||||
//int NSISCALL my_GetWindowText(HWND hWnd, char *val, int size);
|
||||
//int NSISCALL my_GetWindowText(HWND hWnd, TCHAR *val, int size);
|
||||
#define my_GetWindowText GetWindowText
|
||||
int NSISCALL my_GetDialogItemText(UINT idx, char *val);
|
||||
int NSISCALL my_GetDialogItemText(UINT idx, TCHAR *val);
|
||||
//#define my_GetDialogItemText GetDlgItemText
|
||||
|
||||
#ifdef NSIS_CONFIG_LOG
|
||||
extern char log_text[2048];
|
||||
extern TCHAR log_text[2048];
|
||||
void NSISCALL log_write(int close);
|
||||
const char * _RegKeyHandleToName(HKEY hKey);
|
||||
void _LogData2Hex(char *buf, size_t buflen, unsigned char *data, size_t datalen);
|
||||
void log_printf(char *format, ...);
|
||||
const TCHAR * _RegKeyHandleToName(HKEY hKey);
|
||||
void _LogData2Hex(TCHAR *buf, size_t buflen, BYTE *data, size_t datalen);
|
||||
void log_printf(TCHAR *format, ...);
|
||||
#define log_printf2(x1,x2) log_printf(x1,x2);
|
||||
#define log_printf3(x1,x2,x3) log_printf(x1,x2,x3);
|
||||
#define log_printf4(x1,x2,x3,x4) log_printf(x1,x2,x3,x4);
|
||||
|
@ -61,7 +67,7 @@ void log_printf(char *format, ...);
|
|||
#define RegKeyHandleToName(x1) _RegKeyHandleToName(x1);
|
||||
#define LogData2Hex(x1,x2,x3,x4) _LogData2Hex(x1,x2,x3,x4);
|
||||
extern int log_dolog;
|
||||
extern char g_log_file[1024];
|
||||
extern TCHAR g_log_file[1024];
|
||||
#else
|
||||
#define log_printf(x1)
|
||||
#define log_printf2(x1,x2)
|
||||
|
@ -75,35 +81,44 @@ extern char g_log_file[1024];
|
|||
#define LogData2Hex(x1,x2,x3,x4)
|
||||
#endif
|
||||
|
||||
HANDLE NSISCALL myCreateProcess(char *cmd);
|
||||
int NSISCALL my_MessageBox(const char *text, UINT type);
|
||||
HANDLE NSISCALL myCreateProcess(TCHAR *cmd);
|
||||
int NSISCALL my_MessageBox(const TCHAR *text, UINT type);
|
||||
|
||||
void NSISCALL myDelete(char *buf, int flags);
|
||||
void NSISCALL myDelete(TCHAR *buf, int flags);
|
||||
|
||||
HANDLE NSISCALL myOpenFile(const char *fn, DWORD da, DWORD cd);
|
||||
int NSISCALL validpathspec(char *ubuf);
|
||||
char * NSISCALL addtrailingslash(char *str);
|
||||
//char NSISCALL lastchar(const char *str);
|
||||
HANDLE NSISCALL myOpenFile(const TCHAR *fn, DWORD da, DWORD cd);
|
||||
int NSISCALL validpathspec(TCHAR *ubuf);
|
||||
TCHAR * NSISCALL addtrailingslash(TCHAR *str);
|
||||
//TCHAR NSISCALL lastchar(const TCHAR *str);
|
||||
#define lastchar(str) *CharPrev(str,str+mystrlen(str))
|
||||
char * NSISCALL findchar(char *str, char c);
|
||||
char * NSISCALL trimslashtoend(char *buf);
|
||||
char * NSISCALL skip_root(char *path);
|
||||
int NSISCALL is_valid_instpath(char *s);
|
||||
void NSISCALL validate_filename(char *fn);
|
||||
TCHAR * NSISCALL findchar(TCHAR *str, TCHAR c);
|
||||
TCHAR * NSISCALL trimslashtoend(TCHAR *buf);
|
||||
TCHAR * NSISCALL skip_root(TCHAR *path);
|
||||
int NSISCALL is_valid_instpath(TCHAR *s);
|
||||
void NSISCALL validate_filename(TCHAR *fn);
|
||||
|
||||
/**
|
||||
* MoveFileOnReboot tries to move a file by the name of pszExisting to the
|
||||
* name pszNew.
|
||||
*
|
||||
* @param pszExisting The old name of the file.
|
||||
* @param pszNew The new name of the file.
|
||||
*/
|
||||
void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew);
|
||||
|
||||
void NSISCALL mini_memcpy(void *out, const void *in, int len);
|
||||
void NSISCALL remove_ro_attr(char *file);
|
||||
void NSISCALL remove_ro_attr(TCHAR *file);
|
||||
|
||||
enum myGetProcAddressFunctions {
|
||||
MGA_GetDiskFreeSpaceExA,
|
||||
MGA_MoveFileExA,
|
||||
MGA_RegDeleteKeyExA,
|
||||
MGA_GetDiskFreeSpaceEx,
|
||||
MGA_MoveFileEx,
|
||||
MGA_RegDeleteKeyEx,
|
||||
MGA_OpenProcessToken,
|
||||
MGA_LookupPrivilegeValueA,
|
||||
MGA_LookupPrivilegeValue,
|
||||
MGA_AdjustTokenPrivileges,
|
||||
MGA_GetUserDefaultUILanguage,
|
||||
MGA_SHAutoComplete,
|
||||
MGA_SHGetFolderPathA
|
||||
MGA_SHGetFolderPath
|
||||
};
|
||||
|
||||
void * NSISCALL myGetProcAddress(const enum myGetProcAddressFunctions func);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue