@@ -56,30 +56,35 @@ void mbed_error_printf(const char *format, ...)
56
56
57
57
void mbed_error_vprintf (const char * format , va_list arg )
58
58
{
59
- core_util_critical_section_enter ();
60
59
char buffer [132 ];
61
60
int size = vsnprintf (buffer , sizeof buffer , format , arg );
62
61
if (size >= sizeof buffer ) {
63
- /* Output was truncated - indicate by overwriting last 4 bytes of buffer
64
- * with ellipsis and newline.
65
- * (Note that although vsnprintf always leaves a NUL terminator, we
66
- * don't need a terminator and can use the entire buffer)
62
+ /* Output was truncated - indicate by overwriting tail of buffer
63
+ * with ellipsis, newline and null terminator.
67
64
*/
68
- memcpy (& buffer [sizeof buffer - 4 ], "...\n" , 4 );
69
- size = sizeof buffer ;
65
+ static const char ellipsis [] = "...\n" ;
66
+ memcpy (& buffer [sizeof buffer - sizeof ellipsis ], ellipsis , sizeof ellipsis );
67
+ }
68
+ if (size > 0 ) {
69
+ mbed_error_puts (buffer );
70
70
}
71
+ }
72
+
73
+ void mbed_error_puts (const char * str )
74
+ {
75
+ core_util_critical_section_enter ();
71
76
#if MBED_CONF_PLATFORM_STDIO_CONVERT_NEWLINES || MBED_CONF_PLATFORM_STDIO_CONVERT_TTY_NEWLINES
72
77
char stdio_out_prev = '\0' ;
73
- for (int i = 0 ; i < size ; i ++ ) {
74
- if (buffer [ i ] == '\n' && stdio_out_prev != '\r' ) {
78
+ for (; * str != '\0' ; str ++ ) {
79
+ if (* str == '\n' && stdio_out_prev != '\r' ) {
75
80
const char cr = '\r' ;
76
81
write (STDERR_FILENO , & cr , 1 );
77
82
}
78
- write (STDERR_FILENO , & buffer [ i ] , 1 );
79
- stdio_out_prev = buffer [ i ] ;
83
+ write (STDERR_FILENO , str , 1 );
84
+ stdio_out_prev = * str ;
80
85
}
81
86
#else
82
- write (STDERR_FILENO , buffer , size );
87
+ write (STDERR_FILENO , str , strlen ( str ) );
83
88
#endif
84
89
core_util_critical_section_exit ();
85
90
}
0 commit comments