aboutsummaryrefslogtreecommitdiff
path: root/CarpetDev
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2012-07-21 12:51:24 +0200
committerBarry Wardell <barry.wardell@gmail.com>2012-09-11 18:23:28 +0100
commit17d3303a4a041e3ec04c93ec4f719744c3e10e0d (patch)
tree8272d13d02a05228042a5f95316104523885d90d /CarpetDev
parentd909ff177a214bff89f96ade7747879a94b77794 (diff)
CarpetIOF5: Introduce FAILWARN0
Introduce FAILWARN0 to check errors for HDF5 functions returning non-negative integers.
Diffstat (limited to 'CarpetDev')
-rw-r--r--CarpetDev/CarpetIOF5/src/attributes.cc2
-rw-r--r--CarpetDev/CarpetIOF5/src/iof5.hh18
2 files changed, 19 insertions, 1 deletions
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<typename T>
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<typename T>
+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 {