Logo Search packages:      
Sourcecode: avahi version File versions

debug.h

#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

Generated by  Doxygen 1.6.0   Back to index