xref: /aosp_15_r20/external/musl/src/stdio/ungetc.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include "stdio_impl.h"
2*c9945492SAndroid Build Coastguard Worker 
ungetc(int c,FILE * f)3*c9945492SAndroid Build Coastguard Worker int ungetc(int c, FILE *f)
4*c9945492SAndroid Build Coastguard Worker {
5*c9945492SAndroid Build Coastguard Worker 	if (c == EOF) return c;
6*c9945492SAndroid Build Coastguard Worker 
7*c9945492SAndroid Build Coastguard Worker 	FLOCK(f);
8*c9945492SAndroid Build Coastguard Worker 
9*c9945492SAndroid Build Coastguard Worker 	if (!f->rpos) __toread(f);
10*c9945492SAndroid Build Coastguard Worker 	if (!f->rpos || f->rpos <= f->buf - UNGET) {
11*c9945492SAndroid Build Coastguard Worker 		FUNLOCK(f);
12*c9945492SAndroid Build Coastguard Worker 		return EOF;
13*c9945492SAndroid Build Coastguard Worker 	}
14*c9945492SAndroid Build Coastguard Worker 
15*c9945492SAndroid Build Coastguard Worker 	*--f->rpos = c;
16*c9945492SAndroid Build Coastguard Worker 	f->flags &= ~F_EOF;
17*c9945492SAndroid Build Coastguard Worker 
18*c9945492SAndroid Build Coastguard Worker 	FUNLOCK(f);
19*c9945492SAndroid Build Coastguard Worker 	return (unsigned char)c;
20*c9945492SAndroid Build Coastguard Worker }
21