fixed crash bug with masked blitting in headless mode
[rocksndiamonds.git] / src / libgame / system.c
index 2f21541d8e0419b5c938853082051c8075f550fe..e83df10bb1250a83e405380cd3189c77d8006bd4 100644 (file)
@@ -121,7 +121,7 @@ void InitNetworkInfo(boolean enabled, boolean connected, boolean serveronly,
   network.is_server_thread = FALSE;
 }
 
-void InitRuntimeInfo()
+void InitRuntimeInfo(void)
 {
 #if defined(HAS_TOUCH_DEVICE)
   runtime.uses_touch_device = TRUE;
@@ -287,7 +287,7 @@ void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int))
   gfx.draw_global_border_function = draw_global_border_function;
 }
 
-void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int))
+void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int, int))
 {
   gfx.draw_tile_cursor_function = draw_tile_cursor_function;
 }
@@ -599,15 +599,20 @@ void FreeBitmap(Bitmap *bitmap)
   free(bitmap);
 }
 
+void ResetBitmapAlpha(Bitmap *bitmap)
+{
+  bitmap->alpha[0][0] = -1;
+  bitmap->alpha[0][1] = -1;
+  bitmap->alpha[1][0] = -1;
+  bitmap->alpha[1][1] = -1;
+  bitmap->alpha_next_blit = -1;
+}
+
 Bitmap *CreateBitmapStruct(void)
 {
   Bitmap *new_bitmap = checked_calloc(sizeof(Bitmap));
 
-  new_bitmap->alpha[0][0] = -1;
-  new_bitmap->alpha[0][1] = -1;
-  new_bitmap->alpha[1][0] = -1;
-  new_bitmap->alpha[1][1] = -1;
-  new_bitmap->alpha_next_blit = -1;
+  ResetBitmapAlpha(new_bitmap);
 
   return new_bitmap;
 }
@@ -933,6 +938,12 @@ void BlitBitmapMasked(Bitmap *src_bitmap, Bitmap *dst_bitmap,
                      int src_x, int src_y, int width, int height,
                      int dst_x, int dst_y)
 {
+  if (program.headless)
+    return;
+
+  if (src_bitmap == NULL || dst_bitmap == NULL)
+    return;
+
   if (DrawingDeactivated(dst_x, dst_y))
     return;