1*9663SMark.Logan@Sun.COM /* 2*9663SMark.Logan@Sun.COM libparted - a library for manipulating disk partitions 3*9663SMark.Logan@Sun.COM Copyright (C) 1998, 1999, 2000, 2002, 2007 Free Software Foundation, Inc. 4*9663SMark.Logan@Sun.COM 5*9663SMark.Logan@Sun.COM This program is free software; you can redistribute it and/or modify 6*9663SMark.Logan@Sun.COM it under the terms of the GNU General Public License as published by 7*9663SMark.Logan@Sun.COM the Free Software Foundation; either version 3 of the License, or 8*9663SMark.Logan@Sun.COM (at your option) any later version. 9*9663SMark.Logan@Sun.COM 10*9663SMark.Logan@Sun.COM This program is distributed in the hope that it will be useful, 11*9663SMark.Logan@Sun.COM but WITHOUT ANY WARRANTY; without even the implied warranty of 12*9663SMark.Logan@Sun.COM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*9663SMark.Logan@Sun.COM GNU General Public License for more details. 14*9663SMark.Logan@Sun.COM 15*9663SMark.Logan@Sun.COM You should have received a copy of the GNU General Public License 16*9663SMark.Logan@Sun.COM along with this program. If not, see <http://www.gnu.org/licenses/>. 17*9663SMark.Logan@Sun.COM */ 18*9663SMark.Logan@Sun.COM 19*9663SMark.Logan@Sun.COM #ifndef PED_DEBUG_H_INCLUDED 20*9663SMark.Logan@Sun.COM #define PED_DEBUG_H_INCLUDED 21*9663SMark.Logan@Sun.COM 22*9663SMark.Logan@Sun.COM #include <stdarg.h> 23*9663SMark.Logan@Sun.COM 24*9663SMark.Logan@Sun.COM #ifdef DEBUG 25*9663SMark.Logan@Sun.COM 26*9663SMark.Logan@Sun.COM typedef void (PedDebugHandler) ( const int level, const char* file, int line, 27*9663SMark.Logan@Sun.COM const char* function, const char* msg ); 28*9663SMark.Logan@Sun.COM 29*9663SMark.Logan@Sun.COM extern void ped_debug_set_handler (PedDebugHandler* handler); 30*9663SMark.Logan@Sun.COM extern void ped_debug ( const int level, const char* file, int line, 31*9663SMark.Logan@Sun.COM const char* function, const char* msg, ... ); 32*9663SMark.Logan@Sun.COM 33*9663SMark.Logan@Sun.COM extern int ped_assert ( int cond, const char* cond_text, 34*9663SMark.Logan@Sun.COM const char* file, int line, const char* function ); 35*9663SMark.Logan@Sun.COM 36*9663SMark.Logan@Sun.COM #if defined(__GNUC__) && !defined(__JSFTRACE__) 37*9663SMark.Logan@Sun.COM 38*9663SMark.Logan@Sun.COM #define PED_DEBUG(level, ...) \ 39*9663SMark.Logan@Sun.COM ped_debug ( level, __FILE__, __LINE__, __PRETTY_FUNCTION__, \ 40*9663SMark.Logan@Sun.COM __VA_ARGS__ ); 41*9663SMark.Logan@Sun.COM 42*9663SMark.Logan@Sun.COM #define PED_ASSERT(cond, action) \ 43*9663SMark.Logan@Sun.COM do { \ 44*9663SMark.Logan@Sun.COM if (!ped_assert ( cond, \ 45*9663SMark.Logan@Sun.COM #cond, \ 46*9663SMark.Logan@Sun.COM __FILE__, \ 47*9663SMark.Logan@Sun.COM __LINE__, \ 48*9663SMark.Logan@Sun.COM __PRETTY_FUNCTION__ )) \ 49*9663SMark.Logan@Sun.COM { \ 50*9663SMark.Logan@Sun.COM action; \ 51*9663SMark.Logan@Sun.COM } \ 52*9663SMark.Logan@Sun.COM } while (0) 53*9663SMark.Logan@Sun.COM 54*9663SMark.Logan@Sun.COM #else /* !__GNUC__ */ 55*9663SMark.Logan@Sun.COM 56*9663SMark.Logan@Sun.COM /* function because variadic macros are C99 */ 57*9663SMark.Logan@Sun.COM static void PED_DEBUG (int level, ...) 58*9663SMark.Logan@Sun.COM { 59*9663SMark.Logan@Sun.COM va_list va_args; 60*9663SMark.Logan@Sun.COM 61*9663SMark.Logan@Sun.COM va_start (va_args, level); 62*9663SMark.Logan@Sun.COM ped_debug ( level, "unknown file", 0, "unknown function", va_args ); 63*9663SMark.Logan@Sun.COM va_end (va_args); 64*9663SMark.Logan@Sun.COM } 65*9663SMark.Logan@Sun.COM 66*9663SMark.Logan@Sun.COM #define PED_ASSERT(cond, action) \ 67*9663SMark.Logan@Sun.COM do { \ 68*9663SMark.Logan@Sun.COM if (!ped_assert ( cond, \ 69*9663SMark.Logan@Sun.COM #cond, \ 70*9663SMark.Logan@Sun.COM "unknown", \ 71*9663SMark.Logan@Sun.COM 0, \ 72*9663SMark.Logan@Sun.COM "unknown" )) \ 73*9663SMark.Logan@Sun.COM { \ 74*9663SMark.Logan@Sun.COM action; \ 75*9663SMark.Logan@Sun.COM } \ 76*9663SMark.Logan@Sun.COM } while (0) 77*9663SMark.Logan@Sun.COM 78*9663SMark.Logan@Sun.COM #endif /* __GNUC__ */ 79*9663SMark.Logan@Sun.COM 80*9663SMark.Logan@Sun.COM #else /* !DEBUG */ 81*9663SMark.Logan@Sun.COM 82*9663SMark.Logan@Sun.COM #define PED_ASSERT(cond, action) while (0) {} 83*9663SMark.Logan@Sun.COM #define PED_DEBUG(level, ...) while (0) {} 84*9663SMark.Logan@Sun.COM 85*9663SMark.Logan@Sun.COM 86*9663SMark.Logan@Sun.COM #endif /* DEBUG */ 87*9663SMark.Logan@Sun.COM 88*9663SMark.Logan@Sun.COM #endif /* PED_DEBUG_H_INCLUDED */ 89*9663SMark.Logan@Sun.COM 90