[PATCH] lib: fwts_framework: assert on FWTS_REGISTER names being too long

Colin King colin.king at canonical.com
Sun Dec 30 21:36:24 UTC 2012


From: Colin Ian King <colin.king at canonical.com>

We don't want tests registered with stupidly long names so add in
the FWTS_ASSERT macro that can be used to throw a compile time
error if the name of a given test with FWTS_REGISTER is too long.

The FWTS_ASSERT macro is generic enough that we can use it for
other compile time sanity checks if required.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/lib/include/fwts_framework.h | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/lib/include/fwts_framework.h b/src/lib/include/fwts_framework.h
index 0c0c276..7a540ad 100644
--- a/src/lib/include/fwts_framework.h
+++ b/src/lib/include/fwts_framework.h
@@ -240,13 +240,30 @@ static inline int fwts_tests_passed(const fwts_framework *fw)
 	(flags & (FWTS_FLAG_INTERACTIVE | \
 		  FWTS_FLAG_INTERACTIVE_EXPERIMENTAL))
 
+#define FWTS_ARRAY_LEN(s) (sizeof(s)/sizeof(s[0]))
+
+/*
+ * FWTS_ASSERT(test, message) 
+ *	compile time assertion that throws a division by zero
+ *	error to stop compilation if condition "test" is not true.
+ * 	See http://www.pixelbeat.org/programming/gcc/static_assert.html 
+ *
+ */
+#define FWTS_CONCAT(a, b) a ## b
+#define FWTS_CONCAT_EXPAND(a,b) FWTS_CONCAT(a, b)
+#define FWTS_ASSERT(e, m) 	\
+enum { FWTS_CONCAT_EXPAND(FWTS_ASSERT_ ## m ## _in_line_, __LINE__) = 1 / !!(e) }
+
 #define FWTS_REGISTER(name, ops, priority, flags)		\
+/* Ensure name is not too long */				\
+FWTS_ASSERT(FWTS_ARRAY_LEN(name) < 16,				\
+	fwts_register_name_too_long);				\
 								\
 static void __test_init (void) __attribute__ ((constructor));	\
 								\
 static void __test_init (void)					\
 {								\
 	fwts_framework_test_add(name, ops, priority, flags);	\
-}								\
+}
 							
 #endif
-- 
1.8.0




More information about the fwts-devel mailing list