return board;
}
+void copyboard (board_t *dst, board_t *src)
+{
+ if (dst->xsize * dst->ysize != src->xsize * src->ysize) {
+ free (dst->tab);
+ dst->tab = (char *) calloc (1, src->xsize * src->ysize + 1);
+ CHECKALLOC (dst->tab);
+ dst->xsize = src->xsize;
+ dst->ysize = src->ysize;
+ }
+ memcpy (dst->tab, src->tab, dst->xsize * dst->ysize);
+}
+
void freeboard (board_t *board)
{
if (board) {
board_t *board = NULL;
if ((tab) && (strlen (tab) == (size_t)(xsize * ysize))) {
board = initboard (xsize, ysize);
- strcpy (board->tab, tab);
+ memcpy (board->tab, tab, xsize * ysize);
} else if (xsize * ysize > 0) {
board = initboard (xsize, ysize);
}
}
}
- strcpy (board->tab, nextboard->tab);
+ copyboard (board, nextboard);
freeboard (nextboard);
}
rot = (rot > 0) ? rot % 4 : ((1 - rot / 4) * 4 + rot) % 4;
board_t *newelement = NULL;
- if (rot % 2) {
+ if (rot % 2 == 0) {
newelement = initboard (element->xsize, element->ysize);
} else {
newelement = initboard (element->ysize, element->xsize);
switch (rot) {
case 0:
- strcpy (newelement->tab, element->tab);
+ copyboard (newelement, element);
break;
case 1:
for (i = 0; i < element->xsize; i++) {
break;
}
- strcpy (element->tab, newelement->tab);
+ copyboard (element, newelement);
freeboard (newelement);
}