230 lines
4.7 KiB
C
230 lines
4.7 KiB
C
#ifndef _salt_debug_h
|
|
#define _salt_debug_h
|
|
|
|
/*
|
|
* Copyright 2003, 2004 Porchdog Software. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* The views and conclusions contained in the software and documentation are those
|
|
* of the authors and should not be interpreted as representing official policies,
|
|
* either expressed or implied, of Porchdog Software.
|
|
*/
|
|
|
|
#include <salt/platform.h>
|
|
#include <stdarg.h>
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
|
|
#define SW_LOG_WARNING 1 << 0
|
|
#define SW_LOG_ERROR 1 << 1
|
|
#define SW_LOG_NOTICE 1 << 2
|
|
#define SW_LOG_VERBOSE 1 << 3
|
|
#define SW_LOG_OFF 0x0
|
|
|
|
|
|
#if (defined( __GNUC__))
|
|
|
|
# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
|
|
|
|
# define __C99_VA_ARGS__ 1
|
|
|
|
# define __GNU_VA_ARGS__ 0
|
|
|
|
# else
|
|
|
|
# define __C99_VA_ARGS__ 0
|
|
|
|
# define __GNU_VA_ARGS__ 1
|
|
|
|
# endif
|
|
|
|
#else
|
|
|
|
# define __C99_VA_ARGS__ 0
|
|
|
|
# define __GNU_VA_ARGS__ 0
|
|
|
|
#endif
|
|
|
|
|
|
# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 9)))
|
|
|
|
# define __SW_FUNCTION__ __func__
|
|
|
|
#elif (defined( __GNUC__))
|
|
|
|
# define __SW_FUNCTION__ __PRETTY_FUNCTION__
|
|
|
|
#elif( defined(_MSC_VER ) && !defined(_WIN32_WCE))
|
|
|
|
# define __SW_FUNCTION__ __FUNCTION__
|
|
|
|
#else
|
|
|
|
# define __SW_FUNCTION__ ""
|
|
|
|
#endif
|
|
|
|
|
|
#define sw_check(expr, label, action) \
|
|
do \
|
|
{ \
|
|
if (!(expr)) \
|
|
{ \
|
|
{ \
|
|
action; \
|
|
} \
|
|
goto label; \
|
|
} \
|
|
} while (0)
|
|
|
|
|
|
#define sw_check_log(expr, label, action) \
|
|
do \
|
|
{ \
|
|
if (!(expr)) \
|
|
{ \
|
|
sw_print_assert(0, NULL, __FILE__, __SW_FUNCTION__, __LINE__); \
|
|
{ \
|
|
action; \
|
|
} \
|
|
goto label; \
|
|
} \
|
|
} while (0)
|
|
|
|
|
|
#define sw_check_okay(code, label) \
|
|
do \
|
|
{ \
|
|
if ((int) code != 0) \
|
|
{ \
|
|
goto label; \
|
|
} \
|
|
} while (0)
|
|
|
|
|
|
#define sw_check_okay_log(code, label) \
|
|
do \
|
|
{ \
|
|
if ((int) code != 0) \
|
|
{ \
|
|
sw_print_assert((int) code, NULL, __FILE__, __SW_FUNCTION__, __LINE__); \
|
|
goto label; \
|
|
} \
|
|
} while ( 0 )
|
|
|
|
|
|
#define sw_translate_error(expr, errno) ((expr) ? 0 : (errno))
|
|
|
|
|
|
#if defined(WIN32)
|
|
|
|
# define sw_socket_errno() (int) WSAGetLastError()
|
|
# define sw_set_socket_errno(X) WSASetLastError(X)
|
|
# define sw_system_errno() (int) GetLastError()
|
|
# define sw_set_system_errno(X) SetLastError(X)
|
|
|
|
#else
|
|
|
|
# define sw_socket_errno() errno
|
|
# define sw_set_socket_errno(X) errno = X
|
|
# define sw_system_errno() errno
|
|
# define sw_set_system_errno(X) errno = X
|
|
|
|
#endif
|
|
|
|
|
|
#if !defined(NDEBUG)
|
|
|
|
# define sw_assert(X) \
|
|
\
|
|
do \
|
|
{ \
|
|
if (!(X)) \
|
|
{ \
|
|
sw_print_assert( 0, #X, __FILE__, __SW_FUNCTION__, __LINE__); \
|
|
} \
|
|
} while( 0 )
|
|
|
|
#else
|
|
|
|
# define sw_assert(X)
|
|
|
|
#endif
|
|
|
|
|
|
void HOWL_API
|
|
sw_print_assert(
|
|
int code,
|
|
sw_const_string assert_string,
|
|
sw_const_string file,
|
|
sw_const_string func,
|
|
int line);
|
|
|
|
|
|
#if !defined(NDEBUG)
|
|
|
|
void HOWL_API
|
|
sw_print_debug(
|
|
int level,
|
|
sw_const_string format,
|
|
...);
|
|
|
|
# if (__C99_VA_ARGS__)
|
|
|
|
# define sw_debug(...) sw_print_debug(__VA_ARGS__)
|
|
|
|
# else
|
|
|
|
# define sw_debug sw_print_debug
|
|
|
|
# endif
|
|
|
|
#else
|
|
|
|
# if (__C99_VA_ARGS__)
|
|
|
|
# define sw_debug(...)
|
|
|
|
# else
|
|
|
|
# define sw_debug while( 0 )
|
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|
|
#define SW_UNUSED_PARAM(X) (void) (X)
|
|
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif
|