diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-02-26 00:13:30 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-02-27 10:35:07 +0100 |
commit | 7756d31990cd47673a21cacf6fd6d33227d6270e (patch) | |
tree | 5c3d2a9ec52f19c075ca11710e7fa563bcd3b19b /src | |
parent | 41175cec8407da4687493a9f74043656682d470a (diff) |
src: add assertion infrastructure to validate attribute types
This will be used to validate that the size is correct according
to the expected attribute size.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/internal.h | 13 | ||||
-rw-r--r-- | src/utils.c | 7 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/internal.h b/src/internal.h index a3fc46f..3216bc6 100644 --- a/src/internal.h +++ b/src/internal.h @@ -187,4 +187,17 @@ struct nft_set_elem { #define __init __attribute__((constructor)) +void __nft_assert_fail(uint16_t attr, const char *filename, int line); + +#define nft_assert(attr, expr) \ + ((expr) \ + ? (void)0 \ + : __nft_assert_fail(attr, __FILE__, __LINE__)) + +#define nft_assert_validate(_validate_array, _attr, _data_len) \ +({ \ + if (_validate_array[_attr]) \ + nft_assert(attr, _validate_array[_attr] == _data_len); \ +}) + #endif diff --git a/src/utils.c b/src/utils.c index 9691c4c..18917f5 100644 --- a/src/utils.c +++ b/src/utils.c @@ -211,3 +211,10 @@ int nft_fprintf(FILE *fp, void *obj, uint32_t type, uint32_t flags, return ret; } + +void __nft_assert_fail(uint16_t attr, const char *filename, int line) +{ + fprintf(stderr, "libnftnl: attribute %d assertion failed in %s:%d\n", + attr, filename, line); + exit(EXIT_FAILURE); +} |