76 #define STACK_WIDTH sizeof(int)
80 #define TYPE_WIDTH(TYPE) ((sizeof(TYPE) + STACK_WIDTH - 1) & ~(STACK_WIDTH - 1))
107 unsigned char radix, *where, buf[
PR_BUFLEN];
108 unsigned int state, flags, actual_wd, count, given_wd;
111 state = flags = count = given_wd = 0;
113 for (; *fmt; fmt++) {
133 state = flags = given_wd = 0;
138 state = flags = given_wd = 0;
153 if (*fmt >=
'0' && *fmt <=
'9') {
154 given_wd = 10 * given_wd + (*fmt -
'0');
170 #if (UINTPTR_MAX == UINT32_MAX)
172 #elif (UINTPTR_MAX == UINT64_MAX)
175 #error "Unknown UINTPTR_MAX value! Cannot compile printf_helper!"
220 num = va_arg(args,
unsigned long long);
221 else if (flags &
PR_32)
222 num = va_arg(args,
unsigned long);
224 else if (flags &
PR_16) {
226 num = va_arg(args,
int);
228 num = va_arg(args,
int);
233 num = va_arg(args,
int);
235 num = va_arg(args,
unsigned int);
249 temp = (
unsigned long)num % radix;
252 *where = (
unsigned char)(temp +
'0');
253 else if (flags &
PR_CA)
254 *where = (
unsigned char)(temp - 10 +
'A');
256 *where = (
unsigned char)(temp - 10 +
'a');
257 num = (
unsigned long)num / radix;
264 *where = (
unsigned char)va_arg(args,
int);
270 where = va_arg(args,
unsigned char*);
272 actual_wd =
strlen((
const char*)where);
282 if ((flags &
PR_LJ) == 0) {
283 while (given_wd > actual_wd) {
284 fn(flags &
PR_LZ ?
'0' :
' ', &ptr);
295 while (*where !=
'\0') {
300 if (given_wd < actual_wd)
303 given_wd -= actual_wd;
304 for (; given_wd; given_wd--) {
316 state = flags = given_wd = 0;
323 static int vsprintf_help(
unsigned c,
void** ptr)
337 ret_val =
printf_helper(fmt, args, vsprintf_help, (
void*)buf);