changeset 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 a688d34c11d4
files th_printf1.c th_string.c
diffstat 2 files changed, 18 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/th_printf1.c	Thu Feb 25 11:51:52 2016 +0200
+++ b/th_printf1.c	Thu Feb 25 11:53:08 2016 +0200
@@ -7,11 +7,9 @@
  */
 
 static int TH_PFUNC_NAME (char *buf, const int len, int *pos,
-    TH_PFUNC_TYPE_S pval, const int f_radix, const int f_flags,
-    const int f_prec, const BOOL f_unsig, BOOL *f_neg)
+    TH_PFUNC_TYPE_S pval, const int f_radix, const BOOL f_upcase,
+    const BOOL f_unsig, BOOL *f_neg)
 {
-    const BOOL f_upcase = f_flags & TH_PF_UPCASE;
-
     if (f_radix > 16)
         return EOF;
 
@@ -27,8 +25,8 @@
     // Render the value to a string in buf (reversed)
     TH_PFUNC_TYPE_U val = pval;
 
-    // Special case for value of 0 and precision 0
-    if (val == 0 && f_prec == 0)
+    // Special case for value of 0
+    if (val == 0)
         return 0;
 
     *pos = 0;
--- 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) ?