X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fresult.cc;h=ae37e8d24fd5ae7920db90acb9f1084bb9a95f59;hb=c2c9d14f605d54ec6e7d24551fdfa2ceee7d7258;hp=65038f91e19af2f4d7e330c87ac8e6ecf75d5d44;hpb=fde9567090d20b035433241720f00cfbe6e66bf2;p=awesomized%2Flibmemcached diff --git a/libtest/result.cc b/libtest/result.cc index 65038f91..ae37e8d2 100644 --- a/libtest/result.cc +++ b/libtest/result.cc @@ -38,6 +38,10 @@ #include #include +#ifndef __INTEL_COMPILER +# pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif + namespace libtest { __test_result::__test_result(const char *file_arg, int line_arg, const char *func_arg): @@ -52,15 +56,87 @@ __success::__success(const char *file_arg, int line_arg, const char *func_arg): { } -__skipped::__skipped(const char *file_arg, int line_arg, const char *func_arg): - __test_result(file_arg, line_arg, func_arg) +__skipped::__skipped(const char *file_arg, int line_arg, const char *func_arg, ...): + __test_result(file_arg, line_arg, func_arg), + _error_message(NULL), + _error_message_size(0) { + va_list args; + va_start(args, func_arg); + const char *format= va_arg(args, const char *); + _error_message_size= vasprintf(&_error_message, format, args); + assert(_error_message_size != -1); + if (_error_message_size > 0) + { + _error_message_size++; + } + va_end(args); } -__failure::__failure(const char *file_arg, int line_arg, const char *func_arg, const std::string& mesg): - __test_result(file_arg, line_arg, func_arg) +__skipped::__skipped( const __skipped& other ) : + __test_result(other), + _error_message_size(other._error_message_size) +{ + _error_message= (char*) malloc(_error_message_size); + if (_error_message) + { + memcpy(_error_message, other._error_message, _error_message_size); + } + else + { + _error_message_size= -1; + } +} + +__skipped::~__skipped() throw() +{ + if ((_error_message_size > 0) and _error_message) + { + free(_error_message); + _error_message= NULL; + } +} + +__failure::__failure(const char *file_arg, int line_arg, const char *func_arg, ...) : + __test_result(file_arg, line_arg, func_arg), + _error_message(NULL), + _error_message_size(0) +{ + va_list args; + va_start(args, func_arg); + const char *format= va_arg(args, const char *); + _error_message_size= vasprintf(&_error_message, format, args); + assert(_error_message_size != -1); + if (_error_message_size > 0) + { + _error_message_size++; + } + va_end(args); +} + +__failure::__failure( const __failure& other ) : + __test_result(other), + _error_message_size(other._error_message_size) { - snprintf(_error_message, sizeof(_error_message), "%.*s", int(mesg.size()), mesg.c_str()); + _error_message= (char*) malloc(_error_message_size); + if (_error_message) + { + memcpy(_error_message, other._error_message, _error_message_size); + } + else + { + _error_message_size= -1; + } } +__failure::~__failure() throw() +{ + if ((_error_message_size > 0) and _error_message) + { + free(_error_message); + _error_message= NULL; + } +} + + } // namespace libtest