mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-28 06:53:58 +00:00
- Made SafeReadMemory() in i_crash.cpp more readable.
SVN r270 (trunk)
This commit is contained in:
parent
f7a8653196
commit
35d79553b2
2 changed files with 42 additions and 41 deletions
|
@ -1,4 +1,5 @@
|
|||
July 21, 2006
|
||||
- Made SafeReadMemory() in i_crash.cpp more readable.
|
||||
- Here's something MinGW users will probably like: i_crash.cpp no longer needs
|
||||
dbghelp.h if you compile with GCC.
|
||||
|
||||
|
|
|
@ -63,6 +63,37 @@
|
|||
#include <time.h>
|
||||
#include <zlib.h>
|
||||
|
||||
// MACROS ------------------------------------------------------------------
|
||||
|
||||
#define BUGS_FORUM_URL "http://forum.zdoom.org/index.php?c=3"
|
||||
|
||||
#define REMOTE_HOST "localhost"
|
||||
#define REMOTE_PORT "80"
|
||||
#define UPLOAD_URI "/test.php"
|
||||
#define UPLOAD_BOUNDARY "Von-DnrNbJl0 P9d_BD;cEEsQVWpYMq0pbZ6NUmYHus;yIbFbkgB?.N=YC5O=BGZm+Rab5"
|
||||
#define DBGHELP_URI "/msredist/dbghelp.dl_"
|
||||
|
||||
// If you are working on your own modified version of ZDoom, change
|
||||
// the last part of the UPLOAD_AGENT (between parentheses) to your
|
||||
// own program's name. e.g. (Skulltag) or (ZDaemon) or (ZDoomFu)
|
||||
#define UPLOAD_AGENT "ZDoom/" DOTVERSIONSTR " (" GAMESIG ")"
|
||||
|
||||
// Time, in milliseconds, to wait for a send() or recv() to complete.
|
||||
#define TIMEOUT 60000
|
||||
|
||||
// Maximum number of files that might appear in a crash report.
|
||||
#define MAX_FILES 5
|
||||
|
||||
#ifndef WORDS_BIGENDIAN
|
||||
#define MAKE_ID(a,b,c,d) ((a)|((b)<<8)|((c)<<16)|((d)<<24))
|
||||
#else
|
||||
#define MAKE_ID(a,b,c,d) ((d)|((c)<<8)|((b)<<16)|((a)<<24))
|
||||
#endif
|
||||
|
||||
#define ZIP_LOCALFILE MAKE_ID('P','K',3,4)
|
||||
#define ZIP_CENTRALFILE MAKE_ID('P','K',1,2)
|
||||
#define ZIP_ENDOFDIR MAKE_ID('P','K',5,6)
|
||||
|
||||
// DBGHELP.H ---------------------------------------------------------------
|
||||
|
||||
// w32api does not include dbghelp.h, so if I don't include these here,
|
||||
|
@ -108,37 +139,6 @@ typedef BOOL (WINAPI *WRITEDUMP) (HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
|
|||
PMINIDUMP_USER_STREAM_INFORMATION,
|
||||
PMINIDUMP_CALLBACK_INFORMATION);
|
||||
|
||||
// MACROS ------------------------------------------------------------------
|
||||
|
||||
#define BUGS_FORUM_URL "http://forum.zdoom.org/index.php?c=3"
|
||||
|
||||
#define REMOTE_HOST "localhost"
|
||||
#define REMOTE_PORT "80"
|
||||
#define UPLOAD_URI "/test.php"
|
||||
#define UPLOAD_BOUNDARY "Von-DnrNbJl0 P9d_BD;cEEsQVWpYMq0pbZ6NUmYHus;yIbFbkgB?.N=YC5O=BGZm+Rab5"
|
||||
#define DBGHELP_URI "/msredist/dbghelp.dl_"
|
||||
|
||||
// If you are working on your own modified version of ZDoom, change
|
||||
// the last part of the UPLOAD_AGENT (between parentheses) to your
|
||||
// own program's name. e.g. (Skulltag) or (ZDaemon) or (ZDoomFu)
|
||||
#define UPLOAD_AGENT "ZDoom/" DOTVERSIONSTR " (" GAMESIG ")"
|
||||
|
||||
// Time, in milliseconds, to wait for a send() or recv() to complete.
|
||||
#define TIMEOUT 60000
|
||||
|
||||
// Maximum number of files that might appear in a crash report.
|
||||
#define MAX_FILES 5
|
||||
|
||||
#ifndef WORDS_BIGENDIAN
|
||||
#define MAKE_ID(a,b,c,d) ((a)|((b)<<8)|((c)<<16)|((d)<<24))
|
||||
#else
|
||||
#define MAKE_ID(a,b,c,d) ((d)|((c)<<8)|((b)<<16)|((a)<<24))
|
||||
#endif
|
||||
|
||||
#define ZIP_LOCALFILE MAKE_ID('P','K',3,4)
|
||||
#define ZIP_CENTRALFILE MAKE_ID('P','K',1,2)
|
||||
#define ZIP_ENDOFDIR MAKE_ID('P','K',5,6)
|
||||
|
||||
// TYPES -------------------------------------------------------------------
|
||||
|
||||
// Damn Microsoft for doing Get/SetWindowLongPtr half-assed. Instead of
|
||||
|
@ -331,33 +331,33 @@ static WNDPROC StdStaticProc;
|
|||
|
||||
static bool SafeReadMemory (const void *base, void *buffer, size_t len)
|
||||
{
|
||||
// Non-GCC version: Use SEH to catch any bad reads immediately when
|
||||
// they happen instead of trying to catch them beforehand.
|
||||
//
|
||||
#ifdef __GNUC__
|
||||
// GCC version: Test the memory beforehand and hope it doesn't become
|
||||
// unreadable while we read it. GCC is the only Windows compiler (that
|
||||
// I know of) that can't do SEH.
|
||||
#ifdef __GNUC__
|
||||
if (IsBadReadPtr (base, len) != 0)
|
||||
|
||||
if (IsBadReadPtr (base, len))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
memcpy (buffer, base, len);
|
||||
return true;
|
||||
#else
|
||||
// Non-GCC version: Use SEH to catch any bad reads immediately when
|
||||
// they happen instead of trying to catch them beforehand.
|
||||
|
||||
bool success = false;
|
||||
|
||||
#ifndef __GNUC__
|
||||
__try
|
||||
{
|
||||
#endif
|
||||
memcpy (buffer, base, len);
|
||||
success = true;
|
||||
#ifndef __GNUC__
|
||||
}
|
||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
return success;
|
||||
#endif
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
|
Loading…
Reference in a new issue