]> git.draconx.ca Git - rrace.git/blobdiff - src/curses.c
Fix memory leak in ewmh_probe_wm_icon.
[rrace.git] / src / curses.c
index cdaf39630b200dcbe88aa2e9b635c0cb57c00c04..f66589eab3dac2fac9ae85f993eded99259f375f 100644 (file)
@@ -115,17 +115,11 @@ static void draw_tile(WINDOW **win, unsigned colour, unsigned selected,
 
 static int
 redraw_tile(WINDOW **win, unsigned x, unsigned y, unsigned start_column,
-           uint_fast32_t bit0, uint_fast32_t bit1, uint_fast32_t bit2,
-           unsigned selected)
+           uint_least32_t *gp, unsigned selected)
 {
-       uint_fast32_t pos = board_position(x, y);
-       unsigned char tile = 0;
+       unsigned tile = board_tile(gp, 5*y+x);
 
-       if (bit0 & pos) tile |= 1;
-       if (bit1 & pos) tile |= 2;
-       if (bit2 & pos) tile |= 4;
        assert(tile < TILE_MAX);
-
        draw_tile(win, tile, selected, x, y, start_column);
        return tile;
 }
@@ -173,8 +167,7 @@ static void curs_redraw_game(struct app_state *state, uint_fast32_t mask)
        for (i = 0; i < 25; i++) {
                if (mask & 1) {
                        redraw_tile(state->gamewin, i%5, i/5,
-                                   4, gp[0], gp[1], gp[2],
-                                   i == state->cursor);
+                                   4, gp, i == state->cursor);
                }
                mask >>= 1;
        }
@@ -182,7 +175,11 @@ static void curs_redraw_game(struct app_state *state, uint_fast32_t mask)
 
 static void curs_redraw_goal(struct app_state *state, uint_fast32_t mask)
 {
-       uint_least16_t *gp = state->board.goal;
+       uint_least32_t gp[3] = {
+               state->board.goal[0],
+               state->board.goal[1],
+               state->board.goal[2]
+       };
        int i, x, y;
 
        if (!state->goalwin[PLAYWIN_AREA])
@@ -194,24 +191,31 @@ static void curs_redraw_goal(struct app_state *state, uint_fast32_t mask)
 
        for (i = 0; i < 9; i++) {
                if (mask & 1) {
-                       redraw_tile(state->goalwin, i%3, i/3,
-                                   x+2, gp[0], gp[1], gp[2], 0);
+                       redraw_tile(state->goalwin, i%3, i/3, x+2, gp, 0);
                }
                mask >>= 1;
        }
 }
 
+/* Thin wrapper around wresize which returns ERR if support is unavailable. */
+static int do_wresize(WINDOW *window, int h, int w)
+{
+#if HAVE_CURSES_WRESIZE
+       return wresize(window, h, w);
+#endif
+       return ERR;
+}
+
 static WINDOW *realloc_area(WINDOW **orig, int h, int w, int y, int x)
 {
        WINDOW *win = *orig;
 
        if (win) {
-#if HAVE_CURSES_WRESIZE
-               if (wresize(win, h, w) != ERR) {
+               if (do_wresize(win, h, w) != ERR) {
                        mvwin(win, y, x);
                        return win;
                }
-#endif
+
                delwin(win);
        }
 
@@ -228,13 +232,9 @@ static void realloc_tiles(WINDOW **win, int h)
        if (fill && border) {
                int old_w, old_h;
 
-#if HAVE_CURSES_WRESIZE
-               if (wresize(fill, h-2, w-2) != ERR
-                   && wresize(border, h, w) != ERR)
-               {
+               if (do_wresize(fill, h-2, w-2) != ERR
+                   && do_wresize(border, h, w) != ERR)
                        return;
-               }
-#endif
 
                getmaxyx(border, old_h, old_w);
                if (old_h == h)