src/server.c

changeset 98
9cb41383540f
parent 97
f87cad9445b4
equal deleted inserted replaced
97:f87cad9445b4 98:9cb41383540f
127 } 127 }
128 128
129 int fd = server.client->fd; 129 int fd = server.client->fd;
130 if (settings->continuepgn) { 130 if (settings->continuepgn) {
131 /* Continue game, send PGN data */ 131 /* Continue game, send PGN data */
132 uint16_t mc = 0; 132 uint16_t mc = gamestate.movecount;
133 MoveList *movelist = gamestate.movelist;
134 while (movelist) {
135 mc++;
136 movelist = movelist->next;
137 }
138
139 Move* moves = calloc(mc, sizeof(Move));
140
141 movelist = gamestate.movelist;
142 mc = 0;
143 while (movelist) {
144 moves[mc] = movelist->move;
145 mc++;
146 movelist = movelist->next;
147 }
148
149 size_t pgndata_size = sizeof(GameInfo)+sizeof(mc)+mc*sizeof(Move); 133 size_t pgndata_size = sizeof(GameInfo)+sizeof(mc)+mc*sizeof(Move);
150 char *pgndata = malloc(pgndata_size); 134 char *pgndata = malloc(pgndata_size);
151 memcpy(pgndata, &(settings->gameinfo), sizeof(GameInfo)); 135 memcpy(pgndata, &(settings->gameinfo), sizeof(GameInfo));
152 memcpy(pgndata+sizeof(GameInfo), &mc, sizeof(mc)); 136 unsigned offset = sizeof(GameInfo);
153 memcpy(pgndata+sizeof(GameInfo)+sizeof(mc), moves, mc*sizeof(Move)); 137 memcpy(pgndata+offset, &mc, sizeof(mc));
154 free(moves); 138 offset += sizeof(mc);
139 memcpy(pgndata+offset, gamestate.moves, mc*sizeof(Move));
155 net_send_data(fd, NETCODE_PGNDATA, pgndata, pgndata_size); 140 net_send_data(fd, NETCODE_PGNDATA, pgndata, pgndata_size);
156 free(pgndata); 141 free(pgndata);
157 } else { 142 } else {
158 /* Start new game */ 143 /* Start new game */
159 net_send_data(fd, NETCODE_GAMEINFO, 144 net_send_data(fd, NETCODE_GAMEINFO,

mercurial