# HG changeset patch # User Matti Hamalainen # Date 1456224909 -7200 # Node ID b2c4b0b4d44f22984f0d934597dd76565603509e # Parent 0fa9d39df928b3d97c65dbce462faea75b14594a Add initial support for ll and L printf modifiers. diff -r 0fa9d39df928 -r b2c4b0b4d44f th_string.c --- 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': diff -r 0fa9d39df928 -r b2c4b0b4d44f th_string.h --- a/th_string.h Tue Feb 23 12:54:26 2016 +0200 +++ b/th_string.h Tue Feb 23 12:55:09 2016 +0200 @@ -50,14 +50,17 @@ enum { - TH_PF_NONE = 0x00, - TH_PF_ALT = 0x01, - TH_PF_SIGN = 0x02, - TH_PF_SPACE = 0x04, - TH_PF_GROUP = 0x08, + TH_PF_NONE = 0x0000, + TH_PF_ALT = 0x0001, + TH_PF_SIGN = 0x0002, + TH_PF_SPACE = 0x0004, + TH_PF_GROUP = 0x0008, - TH_PF_ZERO = 0x10, - TH_PF_LEFT = 0x20, + TH_PF_ZERO = 0x0100, + TH_PF_LEFT = 0x0200, + + TH_PF_LONG = 0x1000, + TH_PF_LONGLONG = 0x2000, };