1#ifndef _salt_debug_h 2#define _salt_debug_h 3 4/* 5 * Copyright 2003, 2004 Porchdog Software. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without modification, 8 * are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 24 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 25 * OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * The views and conclusions contained in the software and documentation are those 28 * of the authors and should not be interpreted as representing official policies, 29 * either expressed or implied, of Porchdog Software. 30 */ 31 32#include <salt/platform.h> 33#include <stdarg.h> 34 35 36#ifdef __cplusplus 37extern "C" 38{ 39#endif 40 41 42#define SW_LOG_WARNING 1 << 0 43#define SW_LOG_ERROR 1 << 1 44#define SW_LOG_NOTICE 1 << 2 45#define SW_LOG_VERBOSE 1 << 3 46#define SW_LOG_OFF 0x0 47 48 49#if (defined( __GNUC__)) 50 51# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) 52 53# define __C99_VA_ARGS__ 1 54 55# define __GNU_VA_ARGS__ 0 56 57# else 58 59# define __C99_VA_ARGS__ 0 60 61# define __GNU_VA_ARGS__ 1 62 63# endif 64 65#else 66 67# define __C99_VA_ARGS__ 0 68 69# define __GNU_VA_ARGS__ 0 70 71#endif 72 73 74# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 9))) 75 76# define __SW_FUNCTION__ __func__ 77 78#elif (defined( __GNUC__)) 79 80# define __SW_FUNCTION__ __PRETTY_FUNCTION__ 81 82#elif( defined(_MSC_VER ) && !defined(_WIN32_WCE)) 83 84# define __SW_FUNCTION__ __FUNCTION__ 85 86#else 87 88# define __SW_FUNCTION__ "" 89 90#endif 91 92 93#define sw_check(expr, label, action) \ 94do \ 95{ \ 96 if (!(expr)) \ 97 { \ 98 { \ 99 action; \ 100 } \ 101 goto label; \ 102 } \ 103} while (0) 104 105 106#define sw_check_log(expr, label, action) \ 107do \ 108{ \ 109 if (!(expr)) \ 110 { \ 111 sw_print_assert(0, NULL, __FILE__, __SW_FUNCTION__, __LINE__); \ 112 { \ 113 action; \ 114 } \ 115 goto label; \ 116 } \ 117} while (0) 118 119 120#define sw_check_okay(code, label) \ 121do \ 122{ \ 123 if ((int) code != 0) \ 124 { \ 125 goto label; \ 126 } \ 127} while (0) 128 129 130#define sw_check_okay_log(code, label) \ 131do \ 132{ \ 133 if ((int) code != 0) \ 134 { \ 135 sw_print_assert((int) code, NULL, __FILE__, __SW_FUNCTION__, __LINE__); \ 136 goto label; \ 137 } \ 138} while ( 0 ) 139 140 141#define sw_translate_error(expr, errno) ((expr) ? 0 : (errno)) 142 143 144#if defined(WIN32) 145 146# define sw_socket_errno() (int) WSAGetLastError() 147# define sw_set_socket_errno(X) WSASetLastError(X) 148# define sw_system_errno() (int) GetLastError() 149# define sw_set_system_errno(X) SetLastError(X) 150 151#else 152 153# define sw_socket_errno() errno 154# define sw_set_socket_errno(X) errno = X 155# define sw_system_errno() errno 156# define sw_set_system_errno(X) errno = X 157 158#endif 159 160 161#if !defined(NDEBUG) 162 163# define sw_assert(X) \ 164 \ 165 do \ 166 { \ 167 if (!(X)) \ 168 { \ 169 sw_print_assert( 0, #X, __FILE__, __SW_FUNCTION__, __LINE__); \ 170 } \ 171 } while( 0 ) 172 173#else 174 175# define sw_assert(X) 176 177#endif 178 179 180void HOWL_API 181sw_print_assert( 182 int code, 183 sw_const_string assert_string, 184 sw_const_string file, 185 sw_const_string func, 186 int line); 187 188 189#if !defined(NDEBUG) 190 191void HOWL_API 192sw_print_debug( 193 int level, 194 sw_const_string format, 195 ...); 196 197# if (__C99_VA_ARGS__) 198 199# define sw_debug(...) sw_print_debug(__VA_ARGS__) 200 201# else 202 203# define sw_debug sw_print_debug 204 205# endif 206 207#else 208 209# if (__C99_VA_ARGS__) 210 211# define sw_debug(...) 212 213# else 214 215# define sw_debug while( 0 ) 216 217# endif 218 219#endif 220 221 222#define SW_UNUSED_PARAM(X) (void) (X) 223 224 225#if defined(__cplusplus) 226} 227#endif 228 229 230#endif 231