6 static char *putstr(char *d
, char *s
)
13 static int digits(unsigned long n
, int base
)
21 static char *digs
= "0123456789abcdef";
23 static char *putint(char *s
, unsigned long n
, int base
, int sign
)
27 if (sign
&& n
& 0x80000000) {
32 for (i
= 0; i
< d
; i
++) {
33 s
[d
- i
- 1] = digs
[n
% base
];
39 int vsprintf(char *dst
, char *fmt
, va_list ap
)
53 d
= putint(d
, va_arg(ap
, long), 10, 1);
56 d
= putint(d
, va_arg(ap
, long), 10, 0);
60 d
= putint(d
, va_arg(ap
, long), 16, 0);
63 *d
++ = va_arg(ap
, int);
66 d
= putstr(d
, va_arg(ap
, char *));
79 static char buf
[1 << 12];
81 static FILE _stdout
= {1};
82 static FILE _stderr
= {2};
83 FILE *stdout
= &_stdout
;
84 FILE *stderr
= &_stderr
;
86 int printf(char *fmt
, ...)
91 ret
= vsprintf(buf
, fmt
, ap
);
93 return write(1, buf
, ret
);
96 int fprintf(FILE *filp
, char *fmt
, ...)
101 ret
= vsprintf(buf
, fmt
, ap
);
103 return write(filp
->fd
, buf
, ret
);
106 int sprintf(char *dst
, char *fmt
, ...)
111 ret
= vsprintf(dst
, fmt
, ap
);
121 fprintf(stderr
, "%s: %s\n", s
, sys_errlist
[idx
]);