diff options
author | pjd <pjd@FreeBSD.org> | 2010-08-05 18:26:38 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2010-08-05 18:26:38 +0000 |
commit | ca14b5deab70f381014e291a3b7b803c4db5c81f (patch) | |
tree | bb7796651ea6ec61e2de4c6f3974d3287c90b72e /sbin/hastd | |
parent | 014b45ac24f7d94f317efa0ad8a07e52530bf04e (diff) | |
download | FreeBSD-src-ca14b5deab70f381014e291a3b7b803c4db5c81f.zip FreeBSD-src-ca14b5deab70f381014e291a3b7b803c4db5c81f.tar.gz |
Problem with assertion is that it logs on stderr. Add two macros:
PJDLOG_ASSERT() and PJDLOG_VERIFY() that will check the given condition
and log the problem where appropriate. The difference between those
two is that PJDLOG_VERIFY() always work and PJDLOG_ASSERT() can be
turned off by defining NDEBUG.
MFC after: 1 month
Diffstat (limited to 'sbin/hastd')
-rw-r--r-- | sbin/hastd/pjdlog.c | 20 | ||||
-rw-r--r-- | sbin/hastd/pjdlog.h | 13 |
2 files changed, 33 insertions, 0 deletions
diff --git a/sbin/hastd/pjdlog.c b/sbin/hastd/pjdlog.c index 34921e2..6891893 100644 --- a/sbin/hastd/pjdlog.c +++ b/sbin/hastd/pjdlog.c @@ -365,3 +365,23 @@ pjdlog_exitx(int exitcode, const char *fmt, ...) /* NOTREACHED */ va_end(ap); } + +/* + * Log assertion and exit. + */ +void +pjdlog_verify(const char *func, const char *file, int line, + const char *failedexpr) +{ + + if (func == NULL) { + pjdlog_critical("Assertion failed: (%s), file %s, line %d.", + failedexpr, file, line); + } else { + pjdlog_critical("Assertion failed: (%s), function %s, file %s, line %d.", + failedexpr, func, file, line); + } + abort(); + /* NOTREACHED */ +} + diff --git a/sbin/hastd/pjdlog.h b/sbin/hastd/pjdlog.h index 2136b12..28b49de 100644 --- a/sbin/hastd/pjdlog.h +++ b/sbin/hastd/pjdlog.h @@ -85,4 +85,17 @@ void pjdlogv_exit(int exitcode, const char *fmt, va_list ap) __printflike(2, 0) void pjdlog_exitx(int exitcode, const char *fmt, ...) __printflike(2, 3) __dead2; void pjdlogv_exitx(int exitcode, const char *fmt, va_list ap) __printflike(2, 0) __dead2; +void pjdlog_verify(const char *func, const char *file, int line, + const char *failedexpr) __dead2; + +#define PJDLOG_VERIFY(expr) do { \ + if (!(expr)) \ + pjdlog_verify(__func__, __FILE__, __LINE__, #expr); \ +} while (0) +#ifdef NDEBUG +#define PJDLOG_ASSERT(expr) do { } while (0) +#else +#define PJDLOG_ASSERT(expr) PJDLOG_VERIFY(expr) +#endif + #endif /* !_PJDLOG_H_ */ |