| @@ -3,6 +3,7 @@ | |||||
| * | * | ||||
| * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. | * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. | ||||
| * Michael Clark <michael@metaparadigm.com> | * Michael Clark <michael@metaparadigm.com> | ||||
| * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. | |||||
| * | * | ||||
| * This library is free software; you can redistribute it and/or modify | * This library is free software; you can redistribute it and/or modify | ||||
| * it under the terms of the MIT license. See COPYING for details. | * it under the terms of the MIT license. See COPYING for details. | ||||
| @@ -12,6 +13,8 @@ | |||||
| #ifndef _DEBUG_H_ | #ifndef _DEBUG_H_ | ||||
| #define _DEBUG_H_ | #define _DEBUG_H_ | ||||
| #include <stdlib.h> | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| extern "C" { | extern "C" { | ||||
| #endif | #endif | ||||
| @@ -25,21 +28,40 @@ extern void mc_debug(const char *msg, ...); | |||||
| extern void mc_error(const char *msg, ...); | extern void mc_error(const char *msg, ...); | ||||
| extern void mc_info(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 | #ifdef MC_MAINTAINER_MODE | ||||
| #define MC_SET_DEBUG(x) mc_set_debug(x) | #define MC_SET_DEBUG(x) mc_set_debug(x) | ||||
| #define MC_GET_DEBUG() mc_get_debug() | #define MC_GET_DEBUG() mc_get_debug() | ||||
| #define MC_SET_SYSLOG(x) mc_set_syslog(x) | #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_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__) | #define MC_INFO(x, ...) mc_info(x, ##__VA_ARGS__) | ||||
| #else | #else | ||||
| #define MC_SET_DEBUG(x) if (0) mc_set_debug(x) | #define MC_SET_DEBUG(x) if (0) mc_set_debug(x) | ||||
| #define MC_GET_DEBUG() (0) | #define MC_GET_DEBUG() (0) | ||||
| #define MC_SET_SYSLOG(x) if (0) mc_set_syslog(x) | #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_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__) | #define MC_INFO(x, ...) if (0) mc_info(x, ##__VA_ARGS__) | ||||
| #endif | #endif | ||||