Mercurial > hg > th-libs
diff th_string.c @ 330:b2c4b0b4d44f
Add initial support for ll and L printf modifiers.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 23 Feb 2016 12:55:09 +0200 |
parents | 0fa9d39df928 |
children | 11d97063d6dd |
line wrap: on
line diff
--- a/th_string.c Tue Feb 23 12:54:26 2016 +0200 +++ b/th_string.c Tue Feb 23 12:55:09 2016 +0200 @@ -324,7 +324,20 @@ switch (*fmt) { case 'l': + if (*++fmt == 'l') + { + f_flags |= TH_PF_LONGLONG; + fmt++; + } + else + f_flags |= TH_PF_LONG; + break; + case 'L': + fmt++; + f_flags |= TH_PF_LONGLONG; + break; + case 'h': case 'j': case 'z': @@ -347,24 +360,51 @@ break; case 'o': - if ((ret = th_printf_vput_int(ctx, vputch, va_arg(ap, unsigned int), - 8, f_flags, f_width, f_prec, TRUE, FALSE)) == EOF) - goto out; + if (f_flags & TH_PF_LONGLONG) + { + if ((ret = th_printf_vput_int64(ctx, vputch, va_arg(ap, int64_t), + 8, f_flags, f_width, f_prec, TRUE, FALSE)) == EOF) + goto out; + } + else + { + if ((ret = th_printf_vput_int(ctx, vputch, va_arg(ap, unsigned int), + 8, f_flags, f_width, f_prec, TRUE, FALSE)) == EOF) + goto out; + } break; case 'u': case 'i': case 'd': - if ((ret = th_printf_vput_int(ctx, vputch, va_arg(ap, unsigned int), - 10, f_flags, f_width, f_prec, *fmt == 'u', FALSE)) == EOF) - goto out; + if (f_flags & TH_PF_LONGLONG) + { + if ((ret = th_printf_vput_int64(ctx, vputch, va_arg(ap, int64_t), + 10, f_flags, f_width, f_prec, *fmt == 'u', FALSE)) == EOF) + goto out; + } + else + { + if ((ret = th_printf_vput_int(ctx, vputch, va_arg(ap, unsigned int), + 10, f_flags, f_width, f_prec, *fmt == 'u', FALSE)) == EOF) + goto out; + } break; case 'x': case 'X': - if ((ret = th_printf_vput_int(ctx, vputch, va_arg(ap, unsigned int), - 16, f_flags, f_width, f_prec, TRUE, *fmt == 'X')) == EOF) - goto out; + if (f_flags & TH_PF_LONGLONG) + { + if ((ret = th_printf_vput_int64(ctx, vputch, va_arg(ap, int64_t), + 16, f_flags, f_width, f_prec, TRUE, *fmt == 'X')) == EOF) + goto out; + } + else + { + if ((ret = th_printf_vput_int(ctx, vputch, va_arg(ap, unsigned int), + 16, f_flags, f_width, f_prec, TRUE, *fmt == 'X')) == EOF) + goto out; + } break; case 'p':