diff th_string.c @ 361:ad9719373fe3

Simplify th_printf_vbuf*() helpers.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 25 Feb 2016 11:53:08 +0200
parents b1984383aaac
children dfd1e7b3bf2a
line wrap: on
line diff
--- a/th_string.c	Thu Feb 25 11:51:52 2016 +0200
+++ b/th_string.c	Thu Feb 25 11:53:08 2016 +0200
@@ -172,25 +172,32 @@
     const BOOL f_unsig, char *(f_alt)(const int flags))
 {
     char buf[64];
-    int f_len = 0, ret = 0, nwidth;
+    int f_len = 0, ret = 0, vret, nwidth;
     char f_sign, *f_altstr;
     BOOL f_neg = FALSE;
 
     if (f_flags & TH_PF_LONGLONG)
     {
-        ret = th_printf_vbuf_int64(buf, sizeof(buf), &f_len, va_arg(ap, int64_t),
-            f_radix, f_flags, f_prec, f_unsig, &f_neg);
+        vret = th_printf_vbuf_int64(buf, sizeof(buf), &f_len, va_arg(ap, int64_t),
+            f_radix, f_flags & TH_PF_UPCASE, f_unsig, &f_neg);
     }
     else
     {
-       ret = th_printf_vbuf_int(buf, sizeof(buf), &f_len, va_arg(ap, unsigned int),
-            f_radix, f_flags, f_prec, f_unsig, &f_neg);
+       vret = th_printf_vbuf_int(buf, sizeof(buf), &f_len, va_arg(ap, unsigned int),
+            f_radix, f_flags & TH_PF_UPCASE, f_unsig, &f_neg);
     }
 
-    if (ret == EOF)
+    if (vret == EOF)
         return ret;
 
-    f_altstr = ret != 0 && (f_flags & TH_PF_ALT) && f_alt != NULL ? f_alt(f_flags) : NULL;
+    // Special case for value of 0
+    if (vret == 0 && f_prec != 0)
+    {
+        buf[f_len++] = '0';
+        buf[f_len] = 0;
+    }
+
+    f_altstr = vret != 0 && (f_flags & TH_PF_ALT) && f_alt != NULL ? f_alt(f_flags) : NULL;
 
     // Are we using a sign prefix?
     f_sign = f_unsig ? 0 : ((f_flags & TH_PF_SIGN) ?