From 17d3303a4a041e3ec04c93ec4f719744c3e10e0d Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Sat, 21 Jul 2012 12:51:24 +0200 Subject: CarpetIOF5: Introduce FAILWARN0 Introduce FAILWARN0 to check errors for HDF5 functions returning non-negative integers. --- CarpetDev/CarpetIOF5/src/attributes.cc | 2 +- CarpetDev/CarpetIOF5/src/iof5.hh | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'CarpetDev') diff --git a/CarpetDev/CarpetIOF5/src/attributes.cc b/CarpetDev/CarpetIOF5/src/attributes.cc index ff237534a..bed4617d9 100644 --- a/CarpetDev/CarpetIOF5/src/attributes.cc +++ b/CarpetDev/CarpetIOF5/src/attributes.cc @@ -231,7 +231,7 @@ namespace CarpetIOF5 { hid_t const attribute = FAILWARN(H5Aopen_name(group, name)); hid_t const datatype = FAILWARN(H5Aget_type(attribute)); - hsize_t const size = FAILWARN(H5Tget_size(datatype)); + hsize_t const size = FAILWARN0(H5Tget_size(datatype)); char buf[size+1]; hid_t const memdatatype = FAILWARN(H5Tcopy(H5T_C_S1)); FAILWARN(H5Tset_size(memdatatype, size)); diff --git a/CarpetDev/CarpetIOF5/src/iof5.hh b/CarpetDev/CarpetIOF5/src/iof5.hh index 352c83224..c082206c3 100644 --- a/CarpetDev/CarpetIOF5/src/iof5.hh +++ b/CarpetDev/CarpetIOF5/src/iof5.hh @@ -32,6 +32,8 @@ // initialised to false #define FAILWARN(_expr) \ failwarn(error_flag, _expr, __LINE__, __FILE__, CCTK_THORNSTRING, #_expr) +#define FAILWARN0(_expr) \ + failwarn0(error_flag, _expr, __LINE__, __FILE__, CCTK_THORNSTRING, #_expr) template static @@ -39,6 +41,7 @@ T failwarn(bool& error_flag, T const expr, int const line, char const *const file, char const *const thorn, char const *const msg) { + static_assert(T(-1) < T(0), "Type T must be signed"); if (expr < 0) { CCTK_VWarn(CCTK_WARN_ALERT, line, file, thorn, "Expression \"%s\" return %d", msg, (int)expr); @@ -47,6 +50,21 @@ T failwarn(bool& error_flag, T const expr, return expr; } +template +static +T failwarn0(bool& error_flag, T const expr, + int const line, char const *const file, char const *const thorn, + char const *const msg) +{ + static_assert(T(-1) > T(0), "Type T must be unsigned"); + if (expr == 0) { + CCTK_VWarn(CCTK_WARN_ALERT, line, file, thorn, + "Expression \"%s\" return %d", msg, (int)expr); + error_flag = true; + } + return expr; +} + namespace CarpetIOF5 { -- cgit v1.2.3