# HG changeset patch # User Matti Hamalainen # Date 1577701571 -7200 # Node ID ab23d3b3e749b82691ca4b899f92ae3392b20e43 # Parent 52df4ce8e82295404dea54e7fd6cc400c0242fdb Change few variable names to be more descriptive. diff -r 52df4ce8e822 -r ab23d3b3e749 th_printf.c --- a/th_printf.c Sat Dec 28 13:32:56 2019 +0200 +++ b/th_printf.c Mon Dec 30 12:26:11 2019 +0200 @@ -139,7 +139,7 @@ char *buf, int f_flags, int f_width, int f_prec, int f_len, int vret, BOOL f_neg, BOOL f_unsig, char *(f_alt)(const char *buf, const size_t blen, const int vret, const int flags)) { - int ret = 0, nwidth, nprec; + int ret = 0, nspacepad, nzeropad; char f_sign, *f_altstr; // Special case for value of 0 @@ -159,13 +159,18 @@ } // Get alternative format string, if needed and available - f_altstr = (f_flags & TH_PF_ALT) && f_alt != NULL ? f_alt(buf, f_len, vret, f_flags) : NULL; + f_altstr = (f_flags & TH_PF_ALT) && f_alt != NULL ? + f_alt(buf, f_len, vret, f_flags) : NULL; // Are we using a sign prefix? f_sign = f_unsig ? 0 : ((f_flags & TH_PF_SIGN) ? (f_neg ? '-' : '+') : (f_neg ? '-' : ((f_flags & TH_PF_SPACE) ? ' ' : 0))); + // Check for left padding, negates zero prefix padding + if (f_flags & TH_PF_LEFT) + f_flags &= ~TH_PF_ZERO; + // Calculate necessary padding, etc // // << XXX TODO FIXME: The logic here is not very elegant, and it's incorrect @@ -175,37 +180,33 @@ int nlen = (f_sign ? 1 : 0) + (f_altstr ? strlen(f_altstr) : 0); int qlen = (f_prec > f_len ? f_prec : f_len) + nlen; - if (f_flags & TH_PF_LEFT) - f_flags &= ~TH_PF_ZERO; - if (f_flags & TH_PF_POINTER && vret == 0) { PP_LINE("^"); qlen = f_len + nlen; - nwidth = f_width > qlen ? f_width - qlen : 0; - nprec = 0; + nspacepad = f_width > qlen ? f_width - qlen : 0; + nzeropad = 0; } else if ((f_flags & TH_PF_ZERO) && f_prec < 0 && f_width > 0) { PP_LINE("#"); - nprec = f_width - qlen; - nwidth = 0; + nzeropad = f_width - qlen; + nspacepad = 0; } else { PP_LINE("$"); - nprec = (f_prec >= 0) ? f_prec - f_len : 0; - nwidth = (f_width >= 0) ? f_width - qlen : 0; + nzeropad = (f_prec >= 0) ? f_prec - f_len : 0; + nspacepad = (f_width >= 0) ? f_width - qlen : 0; } - PP_PRINTF(": vret=%3d, f_flags=[%s], f_unsig=%d, f_sign='%c', f_len=%3d, f_width=%3d, f_prec=%3d, nwidth=%3d, nprec=%3d, qlen=%3d\n", - vret, get_flags(f_flags), f_unsig, f_sign ? f_sign : '?', f_len, f_width, f_prec, nwidth, nprec, qlen); + PP_PRINTF(": vret=%3d, f_flags=[%s], f_unsig=%d, f_sign='%c', f_len=%3d, f_width=%3d, f_prec=%3d, nspacepad=%3d, nzeropad=%3d, qlen=%3d\n", + vret, get_flags(f_flags), f_unsig, f_sign ? f_sign : '?', f_len, f_width, f_prec, nspacepad, nzeropad, qlen); - // << XXX TODO FIXME - // Prefix padding - if ((ret = th_printf_pad_pre(ctx, vputch, nwidth, f_flags)) == EOF) + // Do prefix padding, if any + if ((ret = th_printf_pad_pre(ctx, vputch, nspacepad, f_flags)) == EOF) return ret; // Sign prefix @@ -217,7 +218,7 @@ return ret; // Zero padding - if (nprec > 0 && (ret = th_vprintf_put_repch(ctx, vputch, nprec, '0')) == EOF) + if (nzeropad > 0 && (ret = th_vprintf_put_repch(ctx, vputch, nzeropad, '0')) == EOF) return ret; // Output the value @@ -227,8 +228,8 @@ return ret; } - // Postfix padding? - return th_printf_pad_post(ctx, vputch, nwidth, f_flags); + // Do postfix padding, if any + return th_printf_pad_post(ctx, vputch, nspacepad, f_flags); } @@ -261,7 +262,7 @@ int th_vprintf_put_str(th_vprintf_ctx *ctx, th_vprintf_putch vputch, const char *str, int f_flags, const int f_width, const int f_prec) { - int nwidth, f_len, ret = 0; + int nspacepad, f_len, ret = 0; // Check for null strings if (str == NULL) @@ -271,10 +272,10 @@ if (f_prec >= 0 && f_len > f_prec) f_len = f_prec; - nwidth = f_width - f_len; + nspacepad = f_width - f_len; - // Prefix padding? - if ((ret = th_printf_pad_pre(ctx, vputch, nwidth, f_flags)) == EOF) + // Do prefix padding, if any + if ((ret = th_printf_pad_pre(ctx, vputch, nspacepad, f_flags)) == EOF) return ret; while (*str && f_len--) @@ -283,8 +284,8 @@ return ret; } - // Postfix padding? - return th_printf_pad_post(ctx, vputch, nwidth, f_flags); + // Do postfix padding, if any + return th_printf_pad_post(ctx, vputch, nspacepad, f_flags); }