common/vsprintf: fix return value when formatting symbolic addresses When the buffer to be formatted to is too small, the function return value is expected to be the number of characters that would be printed (particularly important if that value is then used for allocating a buffer). Hence incrementing the active pointer must always be independent of actually storing a character. Signed-off-by: Jan Beulich --- a/xen/common/vsprintf.c +++ b/xen/common/vsprintf.c @@ -294,6 +294,7 @@ static char *pointer(char *str, char *en /* Print '+/' */ str = number(str, end, sym_offset, 16, -1, -1, SPECIAL|SIGN|PLUS); if ( str <= end ) - *str++ = '/'; + *str = '/'; + ++str; str = number(str, end, sym_size, 16, -1, -1, SPECIAL); }