--- truecrypt/platform/finally.h 2018/04/24 16:48:44 1.1.1.1 +++ truecrypt/platform/finally.h 2018/04/24 17:04:50 1.1.1.7 @@ -1,7 +1,7 @@ /* - Copyright (c) 2008 TrueCrypt Foundation. All rights reserved. + Copyright (c) 2008-2009 TrueCrypt Foundation. All rights reserved. - Governed by the TrueCrypt License 2.4 the full text of which is contained + Governed by the TrueCrypt License 2.8 the full text of which is contained in the file License.txt included in TrueCrypt binary and source code distribution packages. */ @@ -11,25 +11,36 @@ #include "PlatformBase.h" -// Execute defined code when leaving scope -#define finally_do(code) struct TC_JOIN(Finally,__LINE__) { TC_JOIN(~Finally,__LINE__) () { code } } TC_JOIN(finally,__LINE__) - -// Execute defined code with argument 'finally_arg' when leaving scope -#define finally_do_arg(argType, arg, code) struct TC_JOIN(Finally,__LINE__) \ +// 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__) () { code } \ + TC_JOIN(~Finally,__LINE__) () { try { code } catch (...) { } } \ argType finally_arg; \ -} TC_JOIN(finally,__LINE__) (arg) +} \ +TC_UNUSED_VAR \ +TC_JOIN(finally,__LINE__) (arg) -#define finally_do_arg2(argType, arg, argType2, arg2, code) struct TC_JOIN(Finally,__LINE__) \ +#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__) () { code } \ + TC_JOIN(~Finally,__LINE__) () { try { code } catch (...) { } } \ argType finally_arg; \ argType2 finally_arg2; \ -} TC_JOIN(finally,__LINE__) (arg, arg2) +} \ +TC_UNUSED_VAR \ +TC_JOIN(finally,__LINE__) (arg, arg2) -//#define finally_do_arg2(argType, arg, argType2, arg2, code) struct TC_JOIN(Finally,__LINE__) { argType finally_arg; TC_JOIN(Finally,__LINE__) (argType a) : finally_arg (a) { } TC_JOIN(~Finally,__LINE__) () { code } } TC_JOIN(finally,__LINE__) (arg) #endif // TC_HEADER_Platform_Finally