13#define getuint(ap, lflag) \
14 (lflag == 8) ? va_arg(ap, uint64_t) : \
15 (lflag == 4) ? va_arg(ap, uint32_t) : \
16 (lflag == 2) ? va_arg(ap, uint32_t) : \
17 (lflag == 1) ? va_arg(ap, uint32_t) : 0
20#define getint(ap, lflag) \
21 (lflag == 8) ? va_arg(ap, int64_t) : \
22 (lflag == 4) ? va_arg(ap, int32_t) : \
23 (lflag == 2) ? va_arg(ap, int32_t) : \
24 (lflag == 1) ? va_arg(ap, int32_t) : 0
29static void printnum(
void (*func)(
int,
void*),
void *handle,
41 }
while (num /=
base);
46 }
while (num /=
base);
50 spaces = width - (p -
buf);
51 if (padc ==
' ' || padc ==
'0') {
62 func((
int)*p, handle);
75static int kvprintf(
char const *fmt,
void (*func)(
int,
void *),
void *handle,
va_list ap)
81 int lflag, width, padc;
84 while ((ch = *(
unsigned char *)fmt++) !=
'%') {
85 if (ch ==
'\0')
return -1;
93 switch (ch = *(
unsigned char *)fmt++) {
111 width = 10 * width + ch -
'0';
113 if (ch <
'0' || ch >
'9')
126 func(
va_arg(ap,
int) & 0xff, handle);
141 spaces = width -
strlen(p);
173 printnum(func, handle, unum, 10, width, padc);
177 printnum(func, handle, unum, 10, width, padc);
181 printnum(func, handle, unum, 8, width, padc);
184 unum = (
unsigned long)
va_arg(ap,
void *);
185 printnum(func, handle, unum, 8, width, padc);
189 printnum(func, handle, unum, 16, width, padc);
193 printnum(func, handle, unum, -16, width, padc);
246 if ((state->
maxlen != -1) &&
248 state->
cur[0] =
'\0';
275int snprintf(
char *str,
size_t n,
const char *fmt, ...)
#define getuint(ap, lflag)
static void printnum(void(*func)(int, void *), void *handle, uint64_t num, int base, int width, int padc)
int printf(const char *fmt,...)
int snprintf(char *str, size_t n, const char *fmt,...)
static int kvprintf(char const *fmt, void(*func)(int, void *), void *handle, va_list ap)
int sprintf(char *str, const char *fmt,...)
#define getint(ap, lflag)
static const char * numberstring_upper
static void fileputc(int c, void *handle)
static const char * numberstring_lower
int fprintf(FILE *stream, const char *fmt,...)
static void strputc(int c, void *handle)
#define va_start(ap, last)
__builtin_va_list va_list
int fputc(int ch, FILE *fh)
size_t strlen(const char *str)