From ef61466ef0e55a08b5c81c21944ac2819ed4afd5 Mon Sep 17 00:00:00 2001 From: eccles Date: Sun, 22 Sep 2002 19:05:43 +0000 Subject: [PATCH] 80 bytes saved git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1153 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/exehead/Main.c | 11 ++++++----- Source/exehead/Ui.c | 21 +++++++++------------ Source/exehead/util.c | 28 ++++++++++++---------------- Source/exehead/util.h | 10 ++++++++++ 4 files changed, 37 insertions(+), 33 deletions(-) diff --git a/Source/exehead/Main.c b/Source/exehead/Main.c index d93bf1ab..d6d7a888 100644 --- a/Source/exehead/Main.c +++ b/Source/exehead/Main.c @@ -121,15 +121,16 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, if (cmdline[0] != '/') break; cmdline++; +#define END_OF_ARG(c) (((c)|' ')==' ') #if defined(NSIS_CONFIG_VISIBLE_SUPPORT) && defined(NSIS_CONFIG_SILENT_SUPPORT) - if (cmdline[0] == 'S' && (cmdline[1] == ' ' || !cmdline[1])) silent++; + if (cmdline[0] == 'S' && END_OF_ARG(cmdline[1])) silent++; #endif//NSIS_CONFIG_SILENT_SUPPORT && NSIS_CONFIG_VISIBLE_SUPPORT #ifdef NSIS_CONFIG_CRC_SUPPORT - if (*(int*)cmdline == *(int*)"NCRC" && (cmdline[4] == ' ' || !cmdline[4])) no_crc++; + if (*(DWORD*)cmdline == CHAR4_TO_DWORD('N','C','R','C') && END_OF_ARG(cmdline[4])) no_crc++; #endif//NSIS_CONFIG_CRC_SUPPORT - if (*(short*)cmdline == *(short*)"D=") + if (*(WORD*)cmdline == CHAR2_TO_WORD('D','=')) { cmdline[-2]=0; // keep this from being passed to uninstaller if necessary mystrcpy(state_install_directory,cmdline+2); @@ -138,7 +139,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, } // skip over our parm - while (*cmdline && *cmdline != ' ') cmdline=CharNext(cmdline); + while (!END_OF_ARG(*cmdline)) cmdline=CharNext(cmdline); } mystrcpy(g_caption,_LANG_GENERIC_ERROR); @@ -273,7 +274,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, if (g_is_uninstaller) { char *p=cmdline; - while (*p) p++; + while (*p) p++; while (p >= cmdline && (p[0] != '_' || p[1] != '?' || p[2] != '=')) p--; diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c index 46ce1129..09b451ff 100644 --- a/Source/exehead/Ui.c +++ b/Source/exehead/Ui.c @@ -146,16 +146,15 @@ static HWND NSISCALL GetUIItem(HWND defhw, WORD def, WORD custom) { #ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT #define HandleStaticBkColor() _HandleStaticBkColor(uMsg, wParam, lParam) static BOOL NSISCALL _HandleStaticBkColor(UINT uMsg, WPARAM wParam, LPARAM lParam) { - BOOL ret=0; if (uMsg == WM_CTLCOLORSTATIC) { COLORREF color = GetWindowLong((HWND)lParam, GWL_USERDATA); if (color) { LOGBRUSH b={BS_SOLID, color-1, 0}; SetBkColor((HDC)wParam, b.lbColor); - ret=(BOOL)CreateBrushIndirect(&b); + return (BOOL)CreateBrushIndirect(&b); } } - return ret; + return 0; } #else//NSIS_CONFIG_ENHANCEDUI_SUPPORT #define HandleStaticBkColor() 0 @@ -405,9 +404,7 @@ int NSISCALL ui_doinstall(void) static char str2[]="RichEdit20A"; if (!LoadLibrary(str1)) { - ((short*)str1)[3]=*(short*)"32"; - //str1[6]='3'; - //str1[7]='2'; + *(WORD*)(str1+6) = CHAR2_TO_WORD('3','2'); LoadLibrary(str1); } @@ -862,7 +859,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar mini_memcpy(s,state_install_directory,NSIS_MAX_STRLEN); s[sizeof(s)-1]=0; if (s[1] == ':') s[3]=0; - else if (s[0] == '\\' && s[1] == '\\') // \\ path + else if (*(WORD*)s == CHAR2_TO_WORD('\\','\\')) // \\ path { addtrailingslash(s); } @@ -1046,7 +1043,7 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar tv.item.state=INDEXTOSTATEIMAGEMASK(l); } - if (ps_tmpbuf[0] == '!' || (ps_tmpbuf[0] == '-' && ps_tmpbuf[1] == '!')) + if (ps_tmpbuf[0] == '!' || *(WORD*)ps_tmpbuf == CHAR2_TO_WORD('-','!')) { tv.item.pszText++; tv.item.stateMask|=TVIS_BOLD; @@ -1236,13 +1233,13 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar TVITEM tv; int l=1; - if (t->default_state & (1<default_state & (1<default_state|=DFS_SET; } else t->default_state&=~DFS_SET; - + // this can't happen because of the above if() //if (t->default_state & DFS_RO) l+=3; @@ -1513,8 +1510,8 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa // -2 to allow for CR/LF ListView_GetItemText(insthwnd,i,0,ptr,(endPtr-2)-ptr); while (*ptr) ptr++; - *ptr++ = '\r'; - *ptr++ = '\n'; + *(WORD*)ptr = CHAR2_TO_WORD('\r','\n'); + ptr+=2; } *ptr++ = 0; GlobalUnlock(memory); diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 696925ad..62e1e56f 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -121,7 +121,7 @@ char * NSISCALL scanendslash(const char *str) int NSISCALL validpathspec(char *ubuf) { - return ((ubuf[0]=='\\' && ubuf[1]=='\\') || (ubuf[0] && *CharNext(ubuf)==':')); + return ((*(WORD*)ubuf==CHAR2_TO_WORD('\\','\\')) || (ubuf[0] && *CharNext(ubuf)==':')); } int NSISCALL is_valid_instpath(char *s) @@ -129,7 +129,7 @@ int NSISCALL is_valid_instpath(char *s) int ivp=0; // if 8 is set, req is 0, which means rootdirs are not allowed. int req=!(g_inst_cmnheader->misc_flags&8); - if (s[0] == '\\' && s[1] == '\\') // \\ path + if (*(WORD*)s == CHAR2_TO_WORD('\\','\\')) // \\ path { if (lastchar(s)!='\\') ivp++; while (*s) @@ -144,14 +144,10 @@ int NSISCALL is_valid_instpath(char *s) if (*s) { s=CharNext(s); - if (*s == ':') + if (*(WORD*)s == CHAR2_TO_WORD(':','\\')) { - s=CharNext(s); - if (*s == '\\') - { - s=CharNext(s); - if (req || (*s && *s != '\\')) ivp++; - } + s+=2; + if (req || (*s && *s != '\\')) ivp++; } } } @@ -297,8 +293,8 @@ void NSISCALL recursive_create_directory(char *directory) while (*p == ' ') p=CharNext(p); if (!*p) return; tp=CharNext(p); - if (*tp == ':' && tp[1] == '\\') p=tp+2; - else if (p[0] == '\\' && p[1] == '\\') + if (*(WORD*)tp == CHAR2_TO_WORD(':','\\')) p=tp+2; + else if (*(WORD*)p == CHAR2_TO_WORD('\\','\\')) { int x; for (x = 0; x < 2; x ++) @@ -399,14 +395,13 @@ int NSISCALL myatoi(char *s) { int c=*s++; if (c >= '0' && c <= '9') c-='0'; - else if (c >= 'a' && c <= 'f') c-='a'-10; - else if (c >= 'A' && c <= 'F') c-='A'-10; + else if ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F') c = (c & 7) + 9; else break; v<<=4; v+=c; } } - else if (*s == '0' && s[1] <= '7' && s[1] >= '0') + else if (*s == '0' && s[1] >= '0' && s[1] <= '7') { s++; for (;;) @@ -424,8 +419,9 @@ int NSISCALL myatoi(char *s) if (*s == '-') { s++; sign++; } for (;;) { - int c=*s++ - '0'; - if (c < 0 || c > 9) break; + int c=*s++; + if (c >= '0' && c <= '9') c-='0'; + else break; v*=10; v+=c; } diff --git a/Source/exehead/util.h b/Source/exehead/util.h index 0b1141fc..87fd054c 100644 --- a/Source/exehead/util.h +++ b/Source/exehead/util.h @@ -54,3 +54,13 @@ char * NSISCALL scanendslash(const char *str); int NSISCALL is_valid_instpath(char *s); BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew); void * NSISCALL mini_memcpy(void *out, const void *in, int len); + +// Turn a pair of chars into a word +// Turn four chars into a dword +#ifdef __BIG_ENDIAN__ // Not very likely, but, still... +#define CHAR2_TO_WORD(a,b) (((WORD)(b))|((a)<<8)) +#define CHAR4_TO_DWORD(a,b,c,d) (((DWORD)CHAR2_TO_WORD(c,d))|(CHAR2_TO_WORD(a,b)<<16)) +#else +#define CHAR2_TO_WORD(a,b) (((WORD)(a))|((b)<<8)) +#define CHAR4_TO_DWORD(a,b,c,d) (((DWORD)CHAR2_TO_WORD(a,b))|(CHAR2_TO_WORD(c,d)<<16)) +#endif