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 */
}
|