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':