diff --git a/winsup/cygwin/smallprint.cc b/winsup/cygwin/smallprint.cc index e7a9f530f..fa7706b47 100644 --- a/winsup/cygwin/smallprint.cc +++ b/winsup/cygwin/smallprint.cc @@ -146,7 +146,17 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap) l_opt = true; continue; case 'c': - *dst++ = (char) (va_arg (ap, int) & 0xff); + { + unsigned char c = (va_arg (ap, int) & 0xff); + if (isprint (c) || pad != '0') + *dst++ = c; + else + { + *dst++ = '0'; + *dst++ = 'x'; + dst = __rn (dst, 16, 0, c, len, pad, LMASK); + } + } break; case 'C': {