Visual Studio 2012 Support
[xy_vsfilter.git] / src / thirdparty / VirtualDub / h / vd2 / system / seh.h
blob02901752a0f4136ae747d734c7d1de2ad1460bd9
1 // VirtualDub - Video processing and capture application
2 // System library component
3 // Copyright (C) 1998-2004 Avery Lee, All Rights Reserved.
4 //
5 // Beginning with 1.6.0, the VirtualDub system library is licensed
6 // differently than the remainder of VirtualDub. This particular file is
7 // thus licensed as follows (the "zlib" license):
8 //
9 // This software is provided 'as-is', without any express or implied
10 // warranty. In no event will the authors be held liable for any
11 // damages arising from the use of this software.
13 // Permission is granted to anyone to use this software for any purpose,
14 // including commercial applications, and to alter it and redistribute it
15 // freely, subject to the following restrictions:
17 // 1. The origin of this software must not be misrepresented; you must
18 // not claim that you wrote the original software. If you use this
19 // software in a product, an acknowledgment in the product
20 // documentation would be appreciated but is not required.
21 // 2. Altered source versions must be plainly marked as such, and must
22 // not be misrepresented as being the original software.
23 // 3. This notice may not be removed or altered from any source
24 // distribution.
26 #ifndef f_VD2_SYSTEM_SEH_H
27 #define f_VD2_SYSTEM_SEH_H
29 #include <vd2/system/vdtypes.h>
31 //////////////////////////////////////////////////////////////////////////////
32 // Structured Exception Handling (SEH) macros.
34 // These are used for memory access operations that may be possibly invalid
35 // and must be guarded. This is currently only supported on Win32/Win64
36 // platforms with the VC++ compiler, since GCC does not currently support SEH.
38 // For cases where a memcpy() is the guarded operation, the VDMemcpyGuarded()
39 // function should be used instead.
41 //////////////////////////////////////////////////////////////////////////////
43 #if defined(VD_COMPILER_MSVC) && defined(_WIN32)
44 #include <excpt.h>
46 #define vd_seh_guard_try __try
47 #define vd_seh_guard_except __except(GetExceptionCode() == STATUS_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
48 #else
49 #define vd_seh_guard_try if (true)
50 #define vd_seh_guard_except else
51 #endif
53 #endif