5 static char *putstr(char *d
, char *s
)
12 static int digits(unsigned long n
, int base
)
20 static char *digs
= "0123456789abcdef";
22 static char *putint(char *s
, unsigned long n
, int base
, int sign
)
26 if (sign
&& n
& 0x80000000) {
31 for (i
= 0; i
< d
; i
++) {
32 s
[d
- i
- 1] = digs
[n
% base
];
38 int vsprintf(char *dst
, char *fmt
, va_list ap
)
50 d
= putint(d
, va_arg(ap
, long), 10, 1);
53 d
= putint(d
, va_arg(ap
, long), 10, 0);
57 d
= putint(d
, va_arg(ap
, long), 16, 0);
60 *d
++ = va_arg(ap
, int);
63 d
= putstr(d
, va_arg(ap
, char *));
76 static char buf
[1 << 12];
78 static FILE _stdout
= {1};
79 static FILE _stderr
= {2};
80 FILE *stdout
= &_stdout
;
81 FILE *stderr
= &_stderr
;
83 int printf(char *fmt
, ...)
88 ret
= vsprintf(buf
, fmt
, ap
);
90 return write(1, buf
, ret
);
93 int fprintf(FILE *filp
, char *fmt
, ...)
98 ret
= vsprintf(buf
, fmt
, ap
);
100 return write(filp
->fd
, buf
, ret
);
103 int sprintf(char *dst
, char *fmt
, ...)
108 ret
= vsprintf(dst
, fmt
, ap
);