diff --git a/src/Makefile b/src/Makefile index b23af1d..b9fd929 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,6 +1,6 @@ OBJS=main.o sysinput.o fbinit.o fbprimitive.o log.o gpio.o msg_queue.o time_func.o config.o splash.o LIBS=-lbcm2835 -lpthread -CFLAGS=-g +CFLAGS=-g -O -DDEBUG_ASSERT upiwin: $(OBJS) gcc -o upiwin $(OBJS) $(LIBS) diff --git a/src/config.c b/src/config.c index 4b6dd20..e940919 100644 --- a/src/config.c +++ b/src/config.c @@ -47,8 +47,10 @@ static void run_exit_funcs(void) p = exitfuncs; exitfuncs = p->next; for (i = p->num_funcs - 1; i >= 0; i--) - if (p->funcs[i]) - (*(p->funcs[i]))(); + { + ASSERT(p->funcs[i]); + (*(p->funcs[i]))(); + } free(p); } } diff --git a/src/log.c b/src/log.c index de98b14..81afc30 100644 --- a/src/log.c +++ b/src/log.c @@ -23,3 +23,8 @@ void Log(int level, const char *format, ...) strftime(timestamp, 32, "%F %T", &tm); printf("%s.%06u %s %s\n", timestamp, tv.tv_usec, severities[level], buf); } + +void Log_assert_failed(const char *test, const char *file, int line) +{ + Log(LERROR, "ASSERT FAILED: %s at %s:%d", test, file, line); +} diff --git a/src/log.h b/src/log.h index 8c040b8..82145f5 100644 --- a/src/log.h +++ b/src/log.h @@ -8,5 +8,17 @@ #define LDEBUG 4 extern void Log(int level, const char *format, ...); +extern void Log_assert_failed(const char *test, const char *file, int line); + +#define THIS_FILE __FILE__ +#define DECLARE_THIS_FILE() static const char THIS_FILE[] = __FILE__ + +#ifdef DEBUG_ASSERT +#define ASSERT(x) ((x) ? (void)0 : Log_assert_failed(#x, THIS_FILE, __LINE__)) +#define VERIFY(x) ASSERT(x) +#else +#define ASSERT(x) ((void)0) +#define VERIFY(x) ((void)(x)) +#endif #endif /* __LOG_H_INCLUDED */