VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Platform/Finally.h
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2013-06-22 16:16:13 +0200
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2014-11-08 23:18:07 +0100
commitc606f0866c3a2a5db3ef9bc41738ef33eb9612a9 (patch)
tree5847c644cdfff3c1dd55b88b565448087ae89f11 /src/Platform/Finally.h
downloadVeraCrypt-c606f0866c3a2a5db3ef9bc41738ef33eb9612a9.tar.gz
VeraCrypt-c606f0866c3a2a5db3ef9bc41738ef33eb9612a9.zip
Add original TrueCrypt 7.1a sources
Diffstat (limited to 'src/Platform/Finally.h')
-rw-r--r--src/Platform/Finally.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/Platform/Finally.h b/src/Platform/Finally.h
new file mode 100644
index 00000000..b8c692b1
--- /dev/null
+++ b/src/Platform/Finally.h
@@ -0,0 +1,46 @@
+/*
+ Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
+
+ Governed by the TrueCrypt License 3.0 the full text of which is contained in
+ the file License.txt included in TrueCrypt binary and source code distribution
+ packages.
+*/
+
+#ifndef TC_HEADER_Platform_Finally
+#define TC_HEADER_Platform_Finally
+
+#include "PlatformBase.h"
+
+// Execute code when leaving scope
+#define finally_do(code) \
+struct TC_JOIN(Finally,__LINE__) \
+{ \
+ TC_JOIN(~Finally,__LINE__) () { try { code } catch (...) { } } \
+} \
+TC_UNUSED_VAR \
+TC_JOIN(finally,__LINE__)
+
+// Execute code with argument 'finally_arg' when leaving scope
+#define finally_do_arg(argType, arg, code) \
+struct TC_JOIN(Finally,__LINE__) \
+{ \
+ TC_JOIN(Finally,__LINE__) (argType a) : finally_arg (a) { } \
+ TC_JOIN(~Finally,__LINE__) () { try { code } catch (...) { } } \
+ argType finally_arg; \
+} \
+TC_UNUSED_VAR \
+TC_JOIN(finally,__LINE__) (arg)
+
+#define finally_do_arg2(argType, arg, argType2, arg2, code) \
+struct TC_JOIN(Finally,__LINE__) \
+{ \
+ TC_JOIN(Finally,__LINE__) (argType a, argType2 a2) : finally_arg (a), finally_arg2 (a2) { } \
+ TC_JOIN(~Finally,__LINE__) () { try { code } catch (...) { } } \
+ argType finally_arg; \
+ argType2 finally_arg2; \
+} \
+TC_UNUSED_VAR \
+TC_JOIN(finally,__LINE__) (arg, arg2)
+
+
+#endif // TC_HEADER_Platform_Finally