From: <mie...@us...> - 2008-10-26 21:52:38
|
Revision: 3614 http://oorexx.svn.sourceforge.net/oorexx/?rev=3614&view=rev Author: miesfeld Date: 2008-10-26 21:48:20 +0000 (Sun, 26 Oct 2008) Log Message: ----------- Fix 'Application Crash' on Vista. Remove incorrect use of GlobalFlags() GlobalFlags is a 16-bit Windows compatibility to begin with, moreover, it takes a HGLOBAL, not a pointer. We seem to be able to get away with it on XP, but on Vista it causes an application crash. Modified Paths: -------------- main/trunk/extensions/platform/windows/rxwinsys/rxwinsys.cpp main/trunk/extensions/rexxutil/platform/windows/rexxutil.cpp Modified: main/trunk/extensions/platform/windows/rxwinsys/rxwinsys.cpp =================================================================== --- main/trunk/extensions/platform/windows/rxwinsys/rxwinsys.cpp 2008-10-26 19:49:22 UTC (rev 3613) +++ main/trunk/extensions/platform/windows/rxwinsys/rxwinsys.cpp 2008-10-26 21:48:20 UTC (rev 3614) @@ -538,7 +538,6 @@ { DWORD valType, cbData; char * valData, *vType; - ULONG intsize; cbData = sizeof(valData); @@ -549,8 +548,8 @@ NULL, // reserved &valType, // address of buffer for value type NULL, // NULL to get the size - &cbData) == ERROR_SUCCESS) - { // address of data buffer size + &cbData) == ERROR_SUCCESS) // address of data buffer size + { valData = (char *)GlobalAlloc(GPTR, cbData); if (!valData) @@ -563,28 +562,18 @@ NULL, // reserved &valType, // address of buffer for value type (LPBYTE)valData, // address of data buffer - &cbData) == ERROR_SUCCESS) - { // address of data buffer size - - if ((GlobalFlags(retstr->strptr) != GMEM_INVALID_HANDLE) && !GetLastError()) + &cbData) == ERROR_SUCCESS) // address of data buffer size + { + // If the size of the value data is larger than the default + // return string buffer, we need to allocate a bigger buffer. + if ( cbData + sizeof("RESOURCEDESC, ") > STR_BUFFER ) { - intsize = (ULONG)GlobalSize(retstr->strptr); - } - else - { - intsize = STR_BUFFER; - } - if (intsize > retstr->strlength+1) - { - intsize = (ULONG)retstr->strlength+1; - } - if (cbData+10 > intsize) - { - if ((GlobalFlags(retstr->strptr) != GMEM_INVALID_HANDLE) && !GetLastError()) + GlobalFree(retstr->strptr); + retstr->strptr = (char *)GlobalAlloc(GMEM_FIXED, cbData + 10); + if ( retstr->strptr == NULL ) { - GlobalFree(retstr->strptr); + RETERR; } - retstr->strptr = (char *)GlobalAlloc(GMEM_FIXED, cbData + 10); } switch (valType) Modified: main/trunk/extensions/rexxutil/platform/windows/rexxutil.cpp =================================================================== --- main/trunk/extensions/rexxutil/platform/windows/rexxutil.cpp 2008-10-26 19:49:22 UTC (rev 3613) +++ main/trunk/extensions/rexxutil/platform/windows/rexxutil.cpp 2008-10-26 21:48:20 UTC (rev 3614) @@ -2431,7 +2431,8 @@ { lSize = 0x0000ffffL; /* Allocate a large buffer */ - if (!(returnVal = (char *)GlobalAlloc(GPTR, lSize))) + returnVal = (char *)GlobalAlloc(GPTR, lSize); + if (returnVal == NULL) { BUILDRXSTRING(retstr, ERROR_NOMEM); return VALID_ROUTINE; @@ -2457,9 +2458,10 @@ else if (WildCard == false) { if (lSize > buffersize) - if (!(retstr->strptr = (PCH)GlobalAlloc(GMEM_FIXED, lSize))) - { /* use GlobalAlloc */ - if (GlobalFlags(returnVal) != GMEM_INVALID_HANDLE) GlobalFree(returnVal); /* release buffer */ + retstr->strptr = (PCH)GlobalAlloc(GMEM_FIXED, lSize); + if (retstr->strptr == NULL) + { + GlobalFree(returnVal); /* release buffer */ BUILDRXSTRING(retstr, ERROR_NOMEM); return VALID_ROUTINE; } @@ -2539,7 +2541,10 @@ ldp.shvb.shvret = 0; if (RexxVariablePool(&ldp.shvb) == RXSHV_BADN) { - if (GlobalFlags(returnVal) != GMEM_INVALID_HANDLE) GlobalFree(returnVal); /* release buffer */ + if (returnVal != NULL) + { + GlobalFree(returnVal); /* release buffer */ + } return INVALID_ROUTINE; /* error on non-zero */ } } @@ -2551,10 +2556,10 @@ else ldp.count = 0; - if (GlobalFlags(returnVal) != GMEM_INVALID_HANDLE) + if (returnVal != NULL) { GlobalFree(returnVal); - Val = NULL; + returnVal = NULL; } /* set number returned */ @@ -2574,7 +2579,7 @@ return INVALID_ROUTINE; /* error on non-zero */ } /* * End - IF (Wildcard ... * */ - if (returnVal != NULL && ((GlobalFlags(returnVal) != GMEM_INVALID_HANDLE))) + if (returnVal != NULL) { GlobalFree(returnVal); /* release buffer */ } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |