From 204dbb044326dc990e87e4535f3b99668d15bced Mon Sep 17 00:00:00 2001 From: anders_k Date: Mon, 29 May 2017 16:25:18 +0000 Subject: [PATCH] Added WriteRegNone git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6863 212acab6-be3b-0410-9dea-997c60f758d6 --- Docs/src/history.but | 2 +- Source/Platform.h | 1 + Source/exehead/exec.c | 6 +++--- Source/script.cpp | 13 ++++++------- Source/tokens.cpp | 1 + Source/tokens.h | 1 + 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Docs/src/history.but b/Docs/src/history.but index 00a49cff..4ec88bc1 100644 --- a/Docs/src/history.but +++ b/Docs/src/history.but @@ -12,7 +12,7 @@ Released on ? ?th, 2017 \b Added \R{execshellwait}{ExecShellWait} -\b Added \R{writeregmultistr}{WriteRegMultiStr} (\W{http://sf.net/p/nsis/feature-requests/382}{RFE #382}, \W{http://sf.net/p/nsis/patches/219}{patch #219}) +\b Added \R{writeregmultistr}{WriteRegMultiStr} (\W{http://sf.net/p/nsis/feature-requests/382}{RFE #382}, \W{http://sf.net/p/nsis/patches/219}{patch #219}) and WriteRegNone \b Added \R{pragma}{!pragma warning} (\W{http://sf.net/p/nsis/patches/267}{patch #267}) diff --git a/Source/Platform.h b/Source/Platform.h index 92e51788..8fac3f2f 100644 --- a/Source/Platform.h +++ b/Source/Platform.h @@ -656,6 +656,7 @@ typedef DWORDLONG ULONGLONG,*PULONGLONG; #endif #ifndef REG_SZ +# define REG_NONE 0 # define REG_SZ 1 # define REG_EXPAND_SZ 2 # define REG_BINARY 3 diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index 31ad0ca3..199e07a6 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -1273,11 +1273,12 @@ static int NSISCALL ExecuteEntry(entry *entry_) { #ifdef NSIS_CONFIG_LOG TCHAR binbuf[128]; + LPCTSTR logf = rtype==REG_NONE?_T("WriteRegNone"):rtype==REG_MULTI_SZ?_T("WriteRegMultiStr"):_T("WriteRegBin"); #endif // use buf2, buf3 and buf4 size = GetCompressedDataFromDataBlockToMemory(parm3, data, (3 * NSIS_MAX_STRLEN)*sizeof(TCHAR)); LogData2Hex(binbuf, COUNTOF(binbuf), data, size); - log_printf6(_T("%s: \"%s\\%s\" \"%s\"=\"%s\""),rtype==REG_MULTI_SZ?_T("WriteRegMultiStr"):_T("WriteRegBin"),rkn,buf1,buf0,binbuf); + log_printf6(_T("%s: \"%s\\%s\" \"%s\"=\"%s\""),logf,rkn,buf1,buf0,binbuf); } if (size >= 0 && RegSetValueEx(hKey,buf0,0,rtype,data,size) == ERROR_SUCCESS) @@ -1302,8 +1303,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) p[0]=0; if (hKey) { - DWORD l = NSIS_MAX_STRLEN*sizeof(TCHAR); - DWORD t; + DWORD l = NSIS_MAX_STRLEN*sizeof(TCHAR), t; // Jim Park: If plain text in p or binary data in p, // user must be careful in accessing p correctly. diff --git a/Source/script.cpp b/Source/script.cpp index e464f062..42e480e1 100644 --- a/Source/script.cpp +++ b/Source/script.cpp @@ -4209,14 +4209,13 @@ int CEXEBuild::doCommand(int which_token, LineParser &line) SCRIPT_MSG(_T("DeleteRegValue: %") NPRIs _T("\\%") NPRIs _T("\\%") NPRIs _T("\n"),line.gettoken_str(a),line.gettoken_str(a+1),line.gettoken_str(a+2)); } return add_entry(&ent); - case TOK_WRITEREGSTR: - case TOK_WRITEREGEXPANDSTR: - case TOK_WRITEREGBIN: + case TOK_WRITEREGSTR: case TOK_WRITEREGEXPANDSTR: + case TOK_WRITEREGBIN: case TOK_WRITEREGNONE: case TOK_WRITEREGMULTISZ: case TOK_WRITEREGDWORD: { const TCHAR*cmdname=get_commandtoken_name(which_token); - int reg5=0==line.gettoken_enum(1,_T("/REGEDIT5\0")), multisz=which_token==TOK_WRITEREGMULTISZ; + int reg5=0==line.gettoken_enum(1,_T("/REGEDIT5\0")), multisz=which_token == TOK_WRITEREGMULTISZ; if (reg5) line.eattoken(); int k=line.gettoken_enum(1,rootkeys[0]); if (k == -1) k=line.gettoken_enum(1,rootkeys[1]); @@ -4236,10 +4235,10 @@ int CEXEBuild::doCommand(int which_token, LineParser &line) if (which_token == TOK_WRITEREGEXPANDSTR) ent.offsets[5]=REG_EXPAND_SZ; } - if (which_token == TOK_WRITEREGBIN || multisz) + if (which_token == TOK_WRITEREGBIN || multisz || which_token == TOK_WRITEREGNONE) { char data[3*NSIS_MAX_STRLEN]; - int data_len=line.gettoken_binstrdata(4, data, sizeof(data)); + int data_len=line.gettoken_binstrdata(4, data, sizeof(data)), none=which_token == TOK_WRITEREGNONE; if (data_len < 0) { if (data_len == -2) PRINTHELPEX(cmdname); @@ -4252,7 +4251,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line) if (multisz && !build_unicode) for (int p1=0, p2=p1; p1 < data_len; data_len--) data[p1++]=data[p2], p2+=2; // BUGBUG: Should convert each string from UTF-16 to DBCS but only exehead knows the codepage, limited to ASCII for now. ent.offsets[3]=add_db_data(data,data_len); if (ent.offsets[3] < 0) return PS_ERROR; - ent.offsets[4]=REG_BINARY, ent.offsets[5]=multisz?REG_MULTI_SZ:REG_BINARY; + ent.offsets[4]=REG_BINARY, ent.offsets[5]=none?REG_NONE:multisz?REG_MULTI_SZ:REG_BINARY; } if (which_token == TOK_WRITEREGDWORD) { diff --git a/Source/tokens.cpp b/Source/tokens.cpp index be12c92c..57dd8b10 100644 --- a/Source/tokens.cpp +++ b/Source/tokens.cpp @@ -241,6 +241,7 @@ static tokenType tokenlist[TOK__LAST] = {TOK_WRITEREGDWORD,_T("WriteRegDWORD"),4,0,_T("rootkey subkey entry_name new_value_dword\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD|SHCTX)"),TP_CODE}, {TOK_WRITEREGSTR,_T("WriteRegStr"),4,0,_T("rootkey subkey entry_name new_value_string\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD|SHCTX)"),TP_CODE}, {TOK_WRITEREGEXPANDSTR,_T("WriteRegExpandStr"),4,0,_T("rootkey subkey entry_name new_value_string\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD|SHCTX)"),TP_CODE}, +{TOK_WRITEREGNONE,_T("WriteRegNone"),3,1,_T("rootkey subkey entry_name [hex_data]\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD|SHCTX)"),TP_CODE}, {TOK_WRITEUNINSTALLER,_T("WriteUninstaller"),1,0,_T("uninstall_exe_name"),TP_CODE}, {TOK_PEDLLCHARACTERISTICS, _T("PEDllCharacteristics"),2,0,_T("addbits removebits"),TP_GLOBAL}, {TOK_PESUBSYSVER, _T("PESubsysVer"),1,0,_T("major.minor"),TP_GLOBAL}, diff --git a/Source/tokens.h b/Source/tokens.h index 0def5abe..6e43c6b5 100644 --- a/Source/tokens.h +++ b/Source/tokens.h @@ -190,6 +190,7 @@ enum TOK_WRITEREGBIN, TOK_WRITEREGMULTISZ, TOK_WRITEREGDWORD, + TOK_WRITEREGNONE, TOK_DELETEINISEC, TOK_DELETEINISTR, TOK_FLUSHINI,