summaryrefslogtreecommitdiff
path: root/util/files.c
blob: 0afa8439b0052af464e19b8f4967bb0c14474a8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
static int fpeekc(FILE *fp) {
	int c = getc(fp);
	if (c == EOF)
		return c;
	ungetc(c, fp);
	return c;
}

#define fnextc getc /* advance to the next character */

/* NOTE: Advances and returns # of characters advanced iff prefix is found. */
static int fhasprefix(FILE *fp, const char *prefix) {
	assert(*prefix);
	long start = ftell(fp);
	if (start == -1)
		return 0;
	const char *p = prefix;
	while (*p) {
		int c = getc(fp);
		if (c != *p) {
			/* wrong character / EOF */
			fseek(fp, start, SEEK_SET);
			return 0;
		}
		p++;
	}
	return (int)(p - prefix); /* length of prefix */
}