diff -r 4d3d398ba689 -r 47162a7621da src/chess/rules.c --- a/src/chess/rules.c Wed Apr 16 20:32:25 2014 +0200 +++ b/src/chess/rules.c Wed Apr 16 21:16:05 2014 +0200 @@ -48,17 +48,20 @@ elem->next = NULL; elem->move = *move; - gettimeofday(&(elem->move.timestamp), NULL); + struct timeval curtimestamp; + gettimeofday(&curtimestamp, NULL); + elem->move.timestamp.tv_sec = curtimestamp.tv_sec; + elem->move.timestamp.tv_usec = curtimestamp.tv_usec; if (gamestate->lastmove) { - struct timeval *lasttstamp = &(gamestate->lastmove->move.timestamp); - time_t sec = elem->move.timestamp.tv_sec - lasttstamp->tv_sec; + struct movetimeval *lasttstamp = &(gamestate->lastmove->move.timestamp); + uint64_t sec = curtimestamp.tv_sec - lasttstamp->tv_sec; suseconds_t micros; - if (elem->move.timestamp.tv_usec < lasttstamp->tv_usec) { - micros = 1e6L-(lasttstamp->tv_usec - elem->move.timestamp.tv_usec); + if (curtimestamp.tv_usec < lasttstamp->tv_usec) { + micros = 1e6L-(lasttstamp->tv_usec - curtimestamp.tv_usec); sec--; } else { - micros = elem->move.timestamp.tv_usec - lasttstamp->tv_usec; + micros = curtimestamp.tv_usec - lasttstamp->tv_usec; } elem->move.movetime.tv_sec = sec; @@ -559,7 +562,7 @@ while (movelist) { time += gameinfo->addtime; - struct timeval *movetime = &(movelist->move.movetime); + struct movetimeval *movetime = &(movelist->move.movetime); if (movetime->tv_sec >= time) { return 0; } @@ -573,7 +576,7 @@ time_t sec; movelist = gamestate->lastmove; if ((movelist->move.piece & COLOR_MASK) != color) { - struct timeval *lastmovetstamp = &(movelist->move.timestamp); + struct movetimeval *lastmovetstamp = &(movelist->move.timestamp); struct timeval currenttstamp; gettimeofday(¤ttstamp, NULL); micros += currenttstamp.tv_usec - lastmovetstamp->tv_usec;