9 static char *putstr(char *d
, char *s
)
16 static int digits(unsigned long n
, int base
)
24 static char *digs
= "0123456789abcdef";
26 static char *putint(char *s
, unsigned long n
, int base
, int sign
)
30 if (sign
&& n
& 0x80000000) {
35 for (i
= 0; i
< d
; i
++) {
36 s
[d
- i
- 1] = digs
[n
% base
];
42 int vsprintf(char *dst
, char *fmt
, va_list ap
)
56 d
= putint(d
, va_arg(ap
, long), 10, 1);
59 d
= putint(d
, va_arg(ap
, long), 10, 0);
63 d
= putint(d
, va_arg(ap
, long), 16, 0);
66 *d
++ = va_arg(ap
, int);
69 d
= putstr(d
, va_arg(ap
, char *));
82 static char buf
[1 << 12];
84 static FILE _stdout
= {1};
85 static FILE _stderr
= {2};
86 FILE *stdout
= &_stdout
;
87 FILE *stderr
= &_stderr
;
89 int printf(char *fmt
, ...)
94 ret
= vsprintf(buf
, fmt
, ap
);
96 return write(1, buf
, ret
);
99 int fprintf(FILE *filp
, char *fmt
, ...)
104 ret
= vsprintf(buf
, fmt
, ap
);
106 return write(filp
->fd
, buf
, ret
);
109 int sprintf(char *dst
, char *fmt
, ...)
114 ret
= vsprintf(dst
, fmt
, ap
);
124 fprintf(stderr
, "%s: %s\n", s
, sys_errlist
[idx
]);
127 FILE *fopen(char *path
, char *mode
)
132 if (strchr(mode
, '+'))
135 flags
= *mode
== 'r' ? O_RDONLY
: O_WRONLY
;
143 fp
= malloc(sizeof(*fp
));
144 fp
->fd
= open(path
, flags
, 0600);
150 int ret
= close(fp
->fd
);
155 void setbuf(FILE *fp
, char *buf
)