From ed8c349736c77a88643d096c1f69c2145fd17abd Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 14 Nov 2003 13:44:26 +0000 Subject: [PATCH] Better error handling git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3138 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/BgImage/BgImage.cpp | 90 +++++++++++++++++++++--------------- Contrib/ExDLL/exdll.h | 12 ++--- Plugins/BgImage.dll | Bin 7168 -> 7168 bytes 3 files changed, 60 insertions(+), 42 deletions(-) diff --git a/Contrib/BgImage/BgImage.cpp b/Contrib/BgImage/BgImage.cpp index 3046148b..26ca0ec1 100644 --- a/Contrib/BgImage/BgImage.cpp +++ b/Contrib/BgImage/BgImage.cpp @@ -57,9 +57,10 @@ unsigned int uWndWidth, uWndHeight; void *oldProc; LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); -int myatoi(char *s); +HBITMAP __stdcall LoadBitmapFile(long right, long bottom, BITMAP *bBitmap); +int __stdcall myatoi(char *s); COLORREF GetColor(); -void GetXY(LPPOINT lpPoint); +void __stdcall GetXY(LPPOINT lpPoint); BOOL bReturn; @@ -70,7 +71,7 @@ NSISFunc(SetReturn) { bReturn = !lstrcmpi(szTemp, "on"); } -static void my_pushstring(char *str) +static void __stdcall my_pushstring(char *str) { stack_t *th; if (!g_stacktop || !bReturn) return; @@ -90,6 +91,7 @@ NSISFunc(SetBg) { if (!hwndParent) { my_pushstring("can't find parent window"); + LCS(); return; } @@ -129,13 +131,17 @@ NSISFunc(SetBg) { ); if (!hWndImage) { my_pushstring("can't create window"); + LCS(); return; } oldProc = (void *)SetWindowLong(hwndParent, GWL_WNDPROC, (long)WndProc); } - if (bgBitmap.iType == MIL_BITMAP) DeleteObject(bgBitmap.hBitmap); + bgBitmap.bReady = FALSE; + + if (bgBitmap.iType == MIL_BITMAP) + DeleteObject(bgBitmap.hBitmap); unsigned int uScrWidth = GetSystemMetrics(SM_CXSCREEN); unsigned int uScrHeight = GetSystemMetrics(SM_CYSCREEN); @@ -146,8 +152,12 @@ NSISFunc(SetBg) { uWndWidth = uScrWidth; uWndHeight = uScrHeight; + char szGradient[] = {'/', 'G', 'R', 'A', 'D', 'I', 'E', 'N', 'T', 0}; + char szFillScreen[] = {'/', 'F', 'I' ,'L', 'L', 'S', 'C', 'R', 'E', 'E', 'N', 0}; + char szTiled[] = {'/', 'T', 'I', 'L', 'E', 'D', 0}; + popstring(szTemp); - if (!lstrcmpi(szTemp, "/GRADIENT")) { + if (!lstrcmpi(szTemp, szGradient)) { bgBitmap.cGradientFrom = GetColor(); bgBitmap.cGradientTo = GetColor(); @@ -155,12 +165,12 @@ NSISFunc(SetBg) { goto done; } - if (!lstrcmpi(szTemp, "/FILLSCREEN")) { + if (!lstrcmpi(szTemp, szFillScreen)) { bgBitmap.rPos.right = uScrWidth; bgBitmap.rPos.bottom = uScrHeight; popstring(szTemp); } - else if (!lstrcmpi(szTemp, "/TILED")) { + else if (!lstrcmpi(szTemp, szTiled)) { popstring(szTemp); } else { @@ -170,16 +180,10 @@ NSISFunc(SetBg) { BITMAP bBitmap; - bgBitmap.hBitmap = (HBITMAP)LoadImage(0, szTemp, IMAGE_BITMAP, bgBitmap.rPos.right, bgBitmap.rPos.bottom, LR_LOADFROMFILE); - if (!bgBitmap.hBitmap) { - my_pushstring("can't load bitmap"); + bgBitmap.hBitmap = LoadBitmapFile(bgBitmap.rPos.right, bgBitmap.rPos.bottom, &bBitmap); + if (!bgBitmap.hBitmap) return; - } - if (!GetObject(bgBitmap.hBitmap, sizeof(bBitmap), (void *)&bBitmap)) { - my_pushstring("can't load bitmap"); - return; - } if (!bgBitmap.rPos.right) { bgBitmap.rPos.right = bBitmap.bmWidth; bgBitmap.rPos.bottom = bBitmap.bmHeight; @@ -216,6 +220,7 @@ NSISFunc(AddImage) { myImageList *newImg = (myImageList *)GlobalAlloc(GPTR, sizeof(myImageList)); if (!newImg) { my_pushstring("memory allocation error"); + LCS(); return; } @@ -229,20 +234,16 @@ NSISFunc(AddImage) { popstring(szTemp); } - newImg->hBitmap = (HBITMAP)LoadImage(0, szTemp, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); + BITMAP bBitmap; + + newImg->hBitmap = LoadBitmapFile(0, 0, &bBitmap); if (!newImg->hBitmap) { - my_pushstring("can't load bitmap"); + GlobalFree(newImg); return; } GetXY(LPPOINT(&newImg->rPos)); - BITMAP bBitmap; - - if (!GetObject(newImg->hBitmap, sizeof(bBitmap), (void *)&bBitmap)) { - my_pushstring("can't load bitmap"); - return; - } newImg->rPos.right = newImg->rPos.left + bBitmap.bmWidth; newImg->rPos.bottom = newImg->rPos.top + bBitmap.bmHeight; @@ -261,6 +262,7 @@ NSISFunc(AddText) { myImageList *newImg = (myImageList *)GlobalAlloc(GPTR, sizeof(myImageList)); if (!newImg) { my_pushstring("memory allocation error"); + LCS(); return; } @@ -270,6 +272,8 @@ NSISFunc(AddText) { newImg->szText = (char *)GlobalAlloc(GPTR, lstrlen(szTemp)+1); if (!newImg->szText) { my_pushstring("memory allocation error"); + GlobalFree(newImg); + LCS(); return; } lstrcpy(newImg->szText, szTemp); @@ -356,13 +360,14 @@ NSISFunc(Sound) { LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HWND hwndParent = hWndParent; + HWND hwndImage = hWndImage; if (hwnd == hwndParent) { if (message == WM_SIZE) { - ShowWindow(hWndImage, wParam == SIZE_MINIMIZED ? SW_HIDE : SW_SHOW); + ShowWindow(hwndImage, wParam == SIZE_MINIMIZED ? SW_HIDE : SW_SHOW); } if (message == WM_WINDOWPOSCHANGED) { - SetWindowPos(hWndImage, hwndParent, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); + SetWindowPos(hwndImage, hwndParent, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); } return CallWindowProc( (long (__stdcall *)(HWND,unsigned int,unsigned int,long))oldProc, @@ -551,18 +556,31 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) return 0; } -COLORREF GetColor() { - int iRed, iGreen, iBlue; - popstring(szTemp); - iRed = myatoi(szTemp); - popstring(szTemp); - iGreen = myatoi(szTemp); - popstring(szTemp); - iBlue = myatoi(szTemp); - return RGB(iRed, iGreen, iBlue); +HBITMAP __stdcall LoadBitmapFile(long right, long bottom, BITMAP *bBitmap) +{ + HBITMAP hBitmap = (HBITMAP)LoadImage(0, szTemp, IMAGE_BITMAP, right, bottom, LR_LOADFROMFILE); + if (!hBitmap || !GetObject(hBitmap, sizeof(BITMAP), (void *)bBitmap)) { + my_pushstring("can't load bitmap"); + if (hBitmap) + DeleteObject(hBitmap); + LCS(); + return 0; + } + return hBitmap; } -void GetXY(LPPOINT lpPoint) { +COLORREF GetColor() { + COLORREF cColor = 0; + popstring(szTemp); + cColor |= (BYTE) myatoi(szTemp); + popstring(szTemp); + cColor |= ((BYTE) myatoi(szTemp)) << 8; + popstring(szTemp); + cColor |= ((BYTE) myatoi(szTemp)) << 16; + return cColor; +} + +void __stdcall GetXY(LPPOINT lpPoint) { popstring(szTemp); int iPosTemp = myatoi(szTemp); if (iPosTemp < 0) iPosTemp = iPosTemp + (int)uWndWidth; @@ -574,7 +592,7 @@ void GetXY(LPPOINT lpPoint) { lpPoint->y = (unsigned int)iPosTemp; } -int myatoi(char *s) +int __stdcall myatoi(char *s) { unsigned int v=0; if (*s == '0' && (s[1] == 'x' || s[1] == 'X')) diff --git a/Contrib/ExDLL/exdll.h b/Contrib/ExDLL/exdll.h index 12bd6a55..c5bd3b11 100644 --- a/Contrib/ExDLL/exdll.h +++ b/Contrib/ExDLL/exdll.h @@ -24,8 +24,8 @@ static unsigned int g_stringsize; static stack_t **g_stacktop; static char *g_variables; -static int popstring(char *str); // 0 on success, 1 on empty stack -static void pushstring(char *str); +static int __stdcall popstring(char *str); // 0 on success, 1 on empty stack +static void __stdcall pushstring(char *str); enum { @@ -59,7 +59,7 @@ __INST_LAST // utility functions (not required but often useful) -static int popstring(char *str) +static int __stdcall popstring(char *str) { stack_t *th; if (!g_stacktop || !*g_stacktop) return 1; @@ -70,7 +70,7 @@ static int popstring(char *str) return 0; } -static void pushstring(char *str) +static void __stdcall pushstring(char *str) { stack_t *th; if (!g_stacktop) return; @@ -80,13 +80,13 @@ static void pushstring(char *str) *g_stacktop=th; } -static char *getuservariable(int varnum) +static char * __stdcall getuservariable(int varnum) { if (varnum < 0 || varnum >= __INST_LAST) return NULL; return g_variables+varnum*g_stringsize; } -static void setuservariable(int varnum, char *var) +static void __stdcall setuservariable(int varnum, char *var) { if (var != NULL && varnum >= 0 && varnum < __INST_LAST) lstrcpy(g_variables + varnum*g_stringsize, var); diff --git a/Plugins/BgImage.dll b/Plugins/BgImage.dll index b958360dd771987799ff98ed3b0741faa12f5aaf..29589e9bced7d00ddd95ab9a2f9705874604e86b 100644 GIT binary patch delta 3557 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