From: Keith Derrick Date: Thu, 12 Apr 2012 18:40:44 +0000 (-0700) Subject: Add JASSERT macro to guarantee aborts X-Git-Tag: json-c-0.10-20120530~11^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=74d830dc035db05e2d7c4fecc4aff69c2c6d17e7;p=json-c Add JASSERT macro to guarantee aborts --- diff --git a/debug.h b/debug.h index 59a4dfc..1e09701 100644 --- a/debug.h +++ b/debug.h @@ -3,6 +3,7 @@ * * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. * Michael Clark + * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. * * This library is free software; you can redistribute it and/or modify * it under the terms of the MIT license. See COPYING for details. @@ -12,6 +13,8 @@ #ifndef _DEBUG_H_ #define _DEBUG_H_ +#include + #ifdef __cplusplus extern "C" { #endif @@ -25,21 +28,40 @@ extern void mc_debug(const char *msg, ...); extern void mc_error(const char *msg, ...); extern void mc_info(const char *msg, ...); +#ifndef __STRING +#define __STRING(x) #x +#endif + +#ifndef PARSER_BROKEN_FIXED + +#define JASSERT(cond) do {} while(0) + +#else + +#define JASSERT(cond) do { \ + if (!(cond)) { \ + mc_error("cjson assert failure %s:%d : cond \"" __STRING(cond) "failed\n", __FILE__, __LINE__); \ + *(int *)0 = 1;\ + abort(); \ + }\ + } while(0) + +#endif + +#define MC_ABORT(x, ...) mc_abort(x, ##__VA_ARGS__) +#define MC_ERROR(x, ...) mc_error(x, ##__VA_ARGS__) + #ifdef MC_MAINTAINER_MODE #define MC_SET_DEBUG(x) mc_set_debug(x) #define MC_GET_DEBUG() mc_get_debug() #define MC_SET_SYSLOG(x) mc_set_syslog(x) -#define MC_ABORT(x, ...) mc_abort(x, ##__VA_ARGS__) #define MC_DEBUG(x, ...) mc_debug(x, ##__VA_ARGS__) -#define MC_ERROR(x, ...) mc_error(x, ##__VA_ARGS__) #define MC_INFO(x, ...) mc_info(x, ##__VA_ARGS__) #else #define MC_SET_DEBUG(x) if (0) mc_set_debug(x) #define MC_GET_DEBUG() (0) #define MC_SET_SYSLOG(x) if (0) mc_set_syslog(x) -#define MC_ABORT(x, ...) if (0) mc_abort(x, ##__VA_ARGS__) #define MC_DEBUG(x, ...) if (0) mc_debug(x, ##__VA_ARGS__) -#define MC_ERROR(x, ...) if (0) mc_error(x, ##__VA_ARGS__) #define MC_INFO(x, ...) if (0) mc_info(x, ##__VA_ARGS__) #endif