scc

A fork of https://git.simple-cc.org/scc/ for Qute

git clone https://git.8pit.net/scc.git

 1#include <errno.h>
 2#include <stdio.h>
 3#include <stdlib.h>
 4
 5#include "../libc.h"
 6
 7static void
 8cleanup(void)
 9{
10	fflush(NULL);
11}
12
13int
14__putc(int ch, FILE *fp)
15{
16	if (fp->flags & _IOERR)
17		return EOF;
18
19	if (fp->flags & _IOREAD) {
20		fp->flags |= _IOERR;
21		errno = EBADF;
22		return EOF;
23	}
24
25	if (fp->flags & _IOSTRG)
26		return ch & 0xFF;
27
28	if (fp->buf == NULL && _allocbuf(fp))
29		return EOF;
30	_flushall = cleanup;
31
32	if (fp->flags & _IOLBF) {
33		if (fp->wp == fp->lp && _flsbuf(fp))
34			return EOF;
35		*fp->wp++ = ch;
36		if (ch == '\n' && _flsbuf(fp))
37			return EOF;
38	} else if (fp->flags & _IOFBF) {
39		if (_flsbuf(fp))
40			return EOF;
41		*fp->wp++ = ch;
42		fp->rp = fp->buf + fp->len;
43	} else {
44		*fp->wp++ = ch;
45		if (_flsbuf(fp))
46			return EOF;
47	}
48
49	fp->flags |= _IOWRITE;
50	return ch & 0xFF;
51}