Mon, 13 Jul 2026 22:23:00 +0200
fix implementation of parse_pgn()
| src/chess/pgn.c | file | annotate | diff | comparison | revisions |
--- a/src/chess/pgn.c Mon Jul 13 22:16:52 2026 +0200 +++ b/src/chess/pgn.c Mon Jul 13 22:23:00 2026 +0200 @@ -65,31 +65,34 @@ FILE *f; const char *s; } data; - union { - int (*f)(FILE*); - int (*s)(const char*); - } getc; + int (*getc)(struct pgn_input *); void (*backc)(struct pgn_input *); }; -static int pgngetc(struct pgn_input *pgndata) { - return pgndata->getc.f(pgndata->data.f); +static int pgngetc(struct pgn_input *pgn) { + return pgn->getc(pgn); } -static void pgnbackc(struct pgn_input *pgndata) { - pgndata->backc(pgndata); +static void pgnbackc(struct pgn_input *pgn) { + pgn->backc(pgn); } -static void fbackc(struct pgn_input *pgn) { +static int pgnfgetc(struct pgn_input *pgn) { + return fgetc(pgn->data.f); +} + +static void pgnfbackc(struct pgn_input *pgn) { fseek(pgn->data.f, -1, SEEK_CUR); } -static void sbackc(struct pgn_input *pgn) { +static void pgnsbackc(struct pgn_input *pgn) { --(pgn->data.s); } -static int sgetc(const char *s) { - return *s; +static int pgnsgetc(struct pgn_input *pgn) { + int c = *(unsigned char *) pgn->data.s; + pgn->data.s++; + return c; } static int read_pgn_(struct pgn_input pgndata, GameState *gamestate) { @@ -233,8 +236,8 @@ return read_pgn_( (struct pgn_input){ {.f = stream}, - {.f = fgetc}, - fbackc + pgnfgetc, + pgnfbackc }, gamestate); } @@ -242,8 +245,8 @@ return read_pgn_( (struct pgn_input){ {.s = data}, - {.s = sgetc}, - sbackc + pgnsgetc, + pgnsbackc }, gamestate); }