diff options
author | Emil Renner Berthing <esmil@mailme.dk> | 2013-08-27 21:28:16 +0200 |
---|---|---|
committer | Emil Renner Berthing <esmil@mailme.dk> | 2013-08-27 22:03:04 +0200 |
commit | 28633b6935340dd79a80bdccf491c27d82d8169f (patch) | |
tree | 0b1e393cd52803cec0e5f21a17f561d7492d26d8 | |
parent | deb634636068fc191d807606437cd63f5dc0d150 (diff) | |
download | lem-28633b6935340dd79a80bdccf491c27d82d8169f.tar.gz lem-28633b6935340dd79a80bdccf491c27d82d8169f.tar.xz lem-28633b6935340dd79a80bdccf491c27d82d8169f.zip |
add built-time assertions
-rw-r--r-- | include/lem.h | 6 | ||||
-rw-r--r-- | lem/http/core.c | 1 | ||||
-rw-r--r-- | lem/parsers/core.c | 5 |
3 files changed, 12 insertions, 0 deletions
diff --git a/include/lem.h b/include/lem.h index 5b35459..2b548b8 100644 --- a/include/lem.h +++ b/include/lem.h @@ -28,6 +28,12 @@ # define __FUNCTION__ __func__ /* C99 */ #endif +/* Built-time assertions */ +#define LEM_BUILD_ASSERT__(prefix, line) prefix##line +#define LEM_BUILD_ASSERT_(prefix, line) LEM_BUILD_ASSERT__(prefix, line) +#define LEM_BUILD_ASSERT(x) \ + typedef int LEM_BUILD_ASSERT_(lem_assert_, __LINE__)[(x) ? 1 : -1] + #ifdef NDEBUG #define lem_debug(...) #else diff --git a/lem/http/core.c b/lem/http/core.c index 2186294..e9a6628 100644 --- a/lem/http/core.c +++ b/lem/http/core.c @@ -157,6 +157,7 @@ struct parse_http_state { unsigned int w; unsigned char state; }; +LEM_BUILD_ASSERT(sizeof(struct parse_http_state) < LEM_INPUTBUF_PSIZE); static void parse_http_init(lua_State *T) diff --git a/lem/parsers/core.c b/lem/parsers/core.c index affde27..918e95f 100644 --- a/lem/parsers/core.c +++ b/lem/parsers/core.c @@ -18,6 +18,8 @@ #include <lem-parsers.h> +#define LEM_PSTATE_CHECK(x) LEM_BUILD_ASSERT(sizeof(x) < LEM_INPUTBUF_PSIZE) + /* * read available data */ @@ -45,6 +47,7 @@ struct parse_target_state { size_t target; int parts; }; +LEM_PSTATE_CHECK(struct parse_target_state); static void parse_target_init(lua_State *T, struct lem_inputbuf *b) @@ -97,6 +100,7 @@ static const struct lem_parser parser_target = { struct parse_all_state { int parts; }; +LEM_PSTATE_CHECK(struct parse_all_state); static void parse_all_init(lua_State *T, struct lem_inputbuf *b) @@ -159,6 +163,7 @@ struct parse_line_state { int parts; char stopbyte; }; +LEM_PSTATE_CHECK(struct parse_line_state); static void parse_line_init(lua_State *T, struct lem_inputbuf *b) |