# HG changeset patch # User Mike Becker # Date 1783974180 -7200 # Node ID 780337e5cf6a0e18aa3bc2bb051527d498434f6b # Parent 0d6bb8b21193f001e290ad30a35f21364754d281 fix implementation of parse_pgn() diff -r 0d6bb8b21193 -r 780337e5cf6a src/chess/pgn.c --- 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); }