fix implementation of parse_pgn()

Mon, 13 Jul 2026 22:23:00 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 13 Jul 2026 22:23:00 +0200
changeset 142
780337e5cf6a
parent 141
0d6bb8b21193
child 143
e9159c70ff9e

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);
 }
 

mercurial