kprintn(void (*put)(int), UINTMAX_T ul, int base) #endif { /* hold a INTMAX_T in base 8 */ char *p, buf[(sizeof(INTMAX_T) * NBBY / 3) + 1 + 2 /* ALT + SIGN */]; #ifdef LIBSA_PRINTF_WIDTH_SUPPORT char *q; #endif p = buf; do { *p++ = hexdigits[ul % base]; #if defined(__minix) #ifdef LIBSA_PRINTF_WIDTH_SUPPORT /* LSC: Quick hack to support capital hex printout. */ if ((lflag & HEXCAP) && (*(p-1) >= 'a') && (*(p-1) <= 'z')) { *(p-1) -= 32; } #endif #endif /* defined(__minix) */ } while (ul /= base); #ifdef LIBSA_PRINTF_WIDTH_SUPPORT q = p; if (lflag & ALT && *(p - 1) != '0') { if (base == 8) { *p++ = '0'; } else if (base == 16) { *p++ = 'x'; *p++ = '0'; } } if (lflag & NEGATIVE) *p++ = '-'; else if (lflag & SIGN) *p++ = '+'; else if (lflag & SPACE) *p++ = ' '; width -= p - buf; if ((lflag & LADJUST) == 0) { while (p > q) put(*--p); } #endif RPAD(); RZERO(); do { put(*--p); } while (p > buf); LPAD(); }
kprintn(void (*put)(int), UINTMAX_T ul, int base) #endif { /* hold a INTMAX_T in base 8 */ char *p, buf[(sizeof(INTMAX_T) * NBBY / 3) + 1 + 2 /* ALT + SIGN */]; #ifdef LIBSA_PRINTF_WIDTH_SUPPORT char *q; #endif p = buf; do { *p++ = hexdigits[ul % base]; } while (ul /= base); #ifdef LIBSA_PRINTF_WIDTH_SUPPORT q = p; if (lflag & ALT && *(p - 1) != '0') { if (base == 8) { *p++ = '0'; } else if (base == 16) { *p++ = 'x'; *p++ = '0'; } } if (lflag & NEGATIVE) *p++ = '-'; else if (lflag & SIGN) *p++ = '+'; else if (lflag & SPACE) *p++ = ' '; width -= p - buf; if ((lflag & LADJUST) == 0) { while (p > q) put(*--p); } #endif RPAD(); RZERO(); do { put(*--p); } while (p > buf); LPAD(); }