fix segv caused by box indices.

This commit is contained in:
2025-07-30 13:20:50 +02:00
parent 4c707a0fa6
commit 088135ac32

View File

@@ -14,13 +14,16 @@ static inline void setbrdpos(u16 *brd, u16 val) {
} }
void sudoku_place(u16 *brd, u16 val, uint idx) { void sudoku_place(u16 *brd, u16 val, uint idx) {
uint icol = idx % SUDOKU_DPT; uint x = idx % SUDOKU_DPT;
uint irow = idx - icol; uint y = idx / SUDOKU_DPT;
uint ibox = idx - (idx % SUDOKU_BOXLEN);
uint irow = idx - x;
uint ibox = SUDOKU_DPT * (y % SUDOKU_BOXLEN) + SUDOKU_BOXLEN * (x % SUDOKU_BOXLEN);
for (uint i = 0; i < SUDOKU_DPT; i++) { for (uint i = 0; i < SUDOKU_DPT; i++) {
setbrdpos(&brd[irow + i], val); setbrdpos(&brd[irow + i], val);
setbrdpos(&brd[icol + (i * SUDOKU_DPT)], val); setbrdpos(&brd[x + (i * SUDOKU_DPT)], val);
setbrdpos(&brd[ibox + (i / SUDOKU_BOXLEN * SUDOKU_DPT) + (i % SUDOKU_BOXLEN)], val); setbrdpos(&brd[ibox + (SUDOKU_DPT * (i % SUDOKU_BOXLEN))], val);
} }
} }