Mercurial > hg > th-libs
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) ?