X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fassert.hpp;h=cd4a194b2b1ce305e074e5f090ca82abead4d2ee;hb=73e1288b648b5394239e0cefd2251fedfa9727af;hp=28948c3c0cbfbb23f29fe5c51cbce2ddaff36275;hpb=6b04196d0ea6aa9fcd2a6c14a6cb5733c34aa2d2;p=awesomized%2Flibmemcached diff --git a/libmemcached/assert.hpp b/libmemcached/assert.hpp index 28948c3c..cd4a194b 100644 --- a/libmemcached/assert.hpp +++ b/libmemcached/assert.hpp @@ -2,7 +2,7 @@ * * libmcachedd client library. * - * Copyright (C) 2011 Data Differential, http://datadifferential.com/ + * Copyright (C) 2011-2013 Data Differential, http://datadifferential.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -37,11 +37,34 @@ #pragma once +#ifdef __cplusplus +# include +#else +# include +#endif // __cplusplus + #ifdef NDEBUG -#define assert_msg(__expr, __mesg) (void)(__expr); (void)(__mesg); +# define assert_msg(__expr, __mesg) (void)(__expr); (void)(__mesg); +# define assert_vmsg(__expr, __mesg, ...) (void)(__expr); (void)(__mesg); #else -#define assert_msg(__expr, __mesg) \ +# ifdef _WIN32 +# include +# else +# include +# endif + +#ifdef __cplusplus +# include +# include +#else +# include +# include +#endif + +# include + +# define assert_msg(__expr, __mesg) \ do \ { \ if (not (__expr)) \ @@ -52,4 +75,19 @@ do \ } \ } while (0) -#endif +# define assert_vmsg(__expr, __mesg, ...) \ +do \ +{ \ + if (not (__expr)) \ + { \ + size_t ask= snprintf(0, 0, (__mesg), __VA_ARGS__); \ + ask++; \ + char *_error_message= (char*)alloca(sizeof(char) * ask); \ + size_t _error_message_size= snprintf(_error_message, ask, (__mesg), __VA_ARGS__); \ + fprintf(stderr, "\n%s:%d Assertion '%s' failed for function '%s' [ %.*s ]\n", __FILE__, __LINE__, #__expr, __func__, int(_error_message_size), _error_message);\ + custom_backtrace(); \ + abort(); \ + } \ +} while (0) + +#endif // NDEBUG