Rework debug to not need dynamic alloc

But introduces dependency on variadic macros
parent a7c8903c
...@@ -38,8 +38,11 @@ ...@@ -38,8 +38,11 @@
#if defined(MBEDTLS_DEBUG_C) #if defined(MBEDTLS_DEBUG_C)
#define MBEDTLS_DEBUG_STRIP_PARENS( ... ) __VA_ARGS__
#define MBEDTLS_SSL_DEBUG_MSG( level, args ) \ #define MBEDTLS_SSL_DEBUG_MSG( level, args ) \
mbedtls_debug_print_msg_free( ssl, level, __FILE__, __LINE__, mbedtls_debug_fmt args ) mbedtls_debug_print_fmt( ssl, level, __FILE__, __LINE__, \
MBEDTLS_DEBUG_STRIP_PARENS args )
#define MBEDTLS_SSL_DEBUG_RET( level, text, ret ) \ #define MBEDTLS_SSL_DEBUG_RET( level, text, ret ) \
mbedtls_debug_print_ret( ssl, level, __FILE__, __LINE__, text, ret ) mbedtls_debug_print_ret( ssl, level, __FILE__, __LINE__, text, ret )
...@@ -86,13 +89,9 @@ extern "C" { ...@@ -86,13 +89,9 @@ extern "C" {
*/ */
void mbedtls_debug_set_threshold( int threshold ); void mbedtls_debug_set_threshold( int threshold );
char *mbedtls_debug_fmt( const char *format, ... ); void mbedtls_debug_print_fmt( const mbedtls_ssl_context *ssl, int level,
const char *file, int line,
void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, const char *format, ... );
const char *file, int line, const char *text );
void mbedtls_debug_print_msg_free( const mbedtls_ssl_context *ssl, int level,
const char *file, int line, char *text );
void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level,
const char *file, int line, const char *file, int line,
......
...@@ -52,35 +52,35 @@ void mbedtls_debug_set_threshold( int threshold ) ...@@ -52,35 +52,35 @@ void mbedtls_debug_set_threshold( int threshold )
debug_threshold = threshold; debug_threshold = threshold;
} }
char *mbedtls_debug_fmt( const char *format, ... ) void mbedtls_debug_print_fmt( const mbedtls_ssl_context *ssl, int level,
const char *file, int line,
const char *format, ... )
{ {
va_list argp; va_list argp;
char *str = mbedtls_calloc( DEBUG_BUF_SIZE, 1 ); char str[DEBUG_BUF_SIZE];
int ret;
if( str == NULL ) if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold )
return( NULL ); return;
va_start( argp, format ); va_start( argp, format );
#if defined(_WIN32) #if defined(_WIN32)
_vsnprintf_s( str, DEBUG_BUF_SIZE, _TRUNCATE, format, argp ); ret = _vsnprintf_s( str, DEBUG_BUF_SIZE, _TRUNCATE, format, argp );
#else #else
vsnprintf( str, DEBUG_BUF_SIZE, format, argp ); ret = vsnprintf( str, DEBUG_BUF_SIZE, format, argp );
#endif #endif
va_end( argp ); va_end( argp );
return( str ); if( ret >= 0 && ret < DEBUG_BUF_SIZE - 1 )
} {
str[ret] = '\n';
void mbedtls_debug_print_msg_free( const mbedtls_ssl_context *ssl, int level, str[ret + 1] = '\0';
const char *file, int line, char *text ) }
{
if( text != NULL )
mbedtls_debug_print_msg( ssl, level, file, line, text );
mbedtls_free( text ); ssl->conf->f_dbg( ssl->conf->p_dbg, level, file, line, str );
} }
void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, static void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level,
const char *file, int line, const char *text ) const char *file, int line, const char *text )
{ {
char str[DEBUG_BUF_SIZE]; char str[DEBUG_BUF_SIZE];
......
...@@ -59,8 +59,8 @@ void debug_print_msg_threshold( int threshold, int level, char *file, int line, ...@@ -59,8 +59,8 @@ void debug_print_msg_threshold( int threshold, int level, char *file, int line,
mbedtls_debug_set_threshold( threshold ); mbedtls_debug_set_threshold( threshold );
mbedtls_ssl_conf_dbg( &conf, string_debug, &buffer); mbedtls_ssl_conf_dbg( &conf, string_debug, &buffer);
mbedtls_debug_print_msg_free( &ssl, level, file, line, mbedtls_debug_print_fmt( &ssl, level, file, line,
mbedtls_debug_fmt("Text message, 2 == %d", 2 ) ); "Text message, 2 == %d", 2 );
TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 ); TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 );
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment