changed fatal error handling to use new error functions
authorHolger Schemel <info@artsoft.org>
Fri, 18 Sep 2020 22:18:07 +0000 (00:18 +0200)
committerHolger Schemel <info@artsoft.org>
Fri, 18 Sep 2020 22:59:54 +0000 (00:59 +0200)
16 files changed:
src/editor.c
src/files.c
src/game.c
src/init.c
src/libgame/gadgets.c
src/libgame/misc.c
src/libgame/misc.h
src/libgame/sdl.c
src/libgame/setup.c
src/libgame/system.c
src/libgame/text.c
src/netserv.c
src/network.c
src/screens.c
src/tape.c
src/tools.c

index d8b25777f431dd482f328d54da8d4255575c1782..b7b739f5145bfab4cc27355d7a8a7f20c6e850a4 100644 (file)
@@ -6218,7 +6218,7 @@ static void CreateControlButtons(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
   }
@@ -6284,7 +6284,7 @@ static void CreateControlButtons(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
   }
@@ -6337,7 +6337,7 @@ static void CreateControlButtons(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
   }
@@ -6431,7 +6431,7 @@ static void CreateCounterButtons(void)
                        GDI_END);
 
       if (gi == NULL)
-       Error(ERR_EXIT, "cannot create gadget");
+       Fail("cannot create gadget");
 
       level_editor_gadget[id] = gi;
       right_gadget_border[id] =
@@ -6493,7 +6493,7 @@ static void CreateCounterButtons(void)
                          GDI_END);
 
        if (gi == NULL)
-         Error(ERR_EXIT, "cannot create gadget");
+         Fail("cannot create gadget");
 
        level_editor_gadget[id] = gi;
        right_gadget_border[id] =
@@ -6551,7 +6551,7 @@ static void CreateDrawingAreas(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
     right_gadget_border[id] =
@@ -6624,7 +6624,7 @@ static void CreateTextInputGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
   }
@@ -6673,7 +6673,7 @@ static void CreateTextAreaGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
   }
@@ -6752,7 +6752,7 @@ static void CreateSelectboxGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
     right_gadget_border[id] =
@@ -6836,7 +6836,7 @@ static void CreateTextbuttonGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
     right_gadget_border[id] =
@@ -6892,7 +6892,7 @@ static void CreateGraphicbuttonGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
     right_gadget_border[id] =
@@ -7007,7 +7007,7 @@ static void CreateScrollbarGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
   }
@@ -7067,7 +7067,7 @@ static void CreateCheckbuttonGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
     right_gadget_border[id] =
@@ -7132,7 +7132,7 @@ static void CreateRadiobuttonGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     level_editor_gadget[id] = gi;
     right_gadget_border[id] =
index 76aedc600681d67f7eb8fc09dfd3a0d228a6e8ee..706b819e701fa4905d691d8e6cc609703dea37a9 100644 (file)
@@ -11928,8 +11928,7 @@ void ConvertLevels(void)
                                               global.convert_leveldir);
 
   if (convert_leveldir == NULL)
-    Error(ERR_EXIT, "no such level identifier: '%s'",
-         global.convert_leveldir);
+    Fail("no such level identifier: '%s'", global.convert_leveldir);
 
   leveldir_current = convert_leveldir;
 
@@ -12056,13 +12055,13 @@ void CreateLevelSketchImages(void)
     BlitBitmap(drawto, bitmap1, SX, SY, TILEX, TILEY, 0, 0);
 
     if (SDL_SaveBMP(bitmap1->surface, filename1) != 0)
-      Error(ERR_EXIT, "cannot save level sketch image file '%s'", filename1);
+      Fail("cannot save level sketch image file '%s'", filename1);
 
     DrawSizedElement(0, 0, element, MINI_TILESIZE);
     BlitBitmap(drawto, bitmap2, SX, SY, MINI_TILEX, MINI_TILEY, 0, 0);
 
     if (SDL_SaveBMP(bitmap2->surface, filename2) != 0)
-      Error(ERR_EXIT, "cannot save level sketch image file '%s'", filename2);
+      Fail("cannot save level sketch image file '%s'", filename2);
 
     free(filename1);
     free(filename2);
@@ -12186,7 +12185,7 @@ void CreateCustomElementImages(char *directory)
   }
 
   if (SDL_SaveBMP(bitmap->surface, dst_filename) != 0)
-    Error(ERR_EXIT, "cannot save CE graphics file '%s'", dst_filename);
+    Fail("cannot save CE graphics file '%s'", dst_filename);
 
   FreeBitmap(bitmap);
 
index ee3e97891eca48f6ce918a4a5bbae434c8b1c6f7..47fa48ad60b63225d2e8579b86fd7c7c627d07f0 100644 (file)
@@ -15836,7 +15836,7 @@ void CreateGameButtons(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     game_gadget[id] = gi;
   }
index 5c795f4c32daa9e473fd624190dd972a2d71cfd5..44b0a5cbb10da6c37d001c37d0818bad679d1abe 100644 (file)
@@ -1655,7 +1655,7 @@ static void set_cloned_graphic_parameters(int graphic)
     Warn("custom graphic rejected for this element/action");
 
     if (graphic == fallback_graphic)
-      Error(ERR_EXIT, "no fallback graphic available");
+      Fail("no fallback graphic available");
 
     Warn("fallback done to 'char_exclam' for this graphic");
     Warn("---");
@@ -1808,7 +1808,7 @@ static void InitGraphicInfo(void)
       Warn("custom graphic rejected for this element/action");
 
       if (i == fallback_graphic)
-       Error(ERR_EXIT, "no fallback graphic available");
+       Fail("no fallback graphic available");
 
       Warn("fallback done to 'char_exclam' for this graphic");
       Warn("---");
@@ -1839,7 +1839,7 @@ static void InitGraphicInfo(void)
       Warn("custom graphic rejected for this element/action");
 
       if (i == fallback_graphic)
-       Error(ERR_EXIT, "no fallback graphic available");
+       Fail("no fallback graphic available");
 
       Warn("fallback done to 'char_exclam' for this graphic");
       Warn("---");
@@ -4782,7 +4782,7 @@ static void InitGlobal(void)
   {
     // check if element_name_info entry defined for each element in "main.h"
     if (i < MAX_NUM_ELEMENTS && element_name_info[i].token_name == NULL)
-      Error(ERR_EXIT, "undefined 'element_name_info' entry for element %d", i);
+      Fail("undefined 'element_name_info' entry for element %d", i);
 
     element_info[i].token_name = element_name_info[i].token_name;
     element_info[i].class_name = element_name_info[i].class_name;
@@ -4794,7 +4794,7 @@ static void InitGlobal(void)
     // check if global_anim_name_info defined for each entry in "main.h"
     if (i < NUM_GLOBAL_ANIM_TOKENS &&
        global_anim_name_info[i].token_name == NULL)
-      Error(ERR_EXIT, "undefined 'global_anim_name_info' entry for anim %d", i);
+      Fail("undefined 'global_anim_name_info' entry for anim %d", i);
 
     global_anim_info[i].token_name = global_anim_name_info[i].token_name;
   }
@@ -5011,7 +5011,7 @@ static void Execute_Command(char *command)
     char *filename = &command[11];
 
     if (!fileExists(filename))
-      Error(ERR_EXIT, "cannot open file '%s'", filename);
+      Fail("cannot open file '%s'", filename);
 
     LoadLevelFromFilename(&level, filename);
     DumpLevel(&level);
@@ -5023,7 +5023,7 @@ static void Execute_Command(char *command)
     char *filename = &command[10];
 
     if (!fileExists(filename))
-      Error(ERR_EXIT, "cannot open file '%s'", filename);
+      Fail("cannot open file '%s'", filename);
 
     LoadTapeFromFilename(filename);
     DumpTape(&tape);
@@ -5090,7 +5090,7 @@ static void Execute_Command(char *command)
       str_ptr++;
 
     if (*str_ptr == '\0')
-      Error(ERR_EXIT, "cannot find MODE in command '%s'", command);
+      Fail("cannot find MODE in command '%s'", command);
 
     global.patchtapes_mode = str_ptr;          // store patch mode
 
@@ -5135,7 +5135,7 @@ static void Execute_Command(char *command)
       if (strEqual(global.patchtapes_mode, "help"))
        global.patchtapes_leveldir = UNDEFINED_LEVELSET;
       else
-       Error(ERR_EXIT, "cannot find LEVELDIR in command '%s'", command);
+       Fail("cannot find LEVELDIR in command '%s'", command);
     }
 
     program.headless = TRUE;
@@ -5161,8 +5161,8 @@ static void Execute_Command(char *command)
     global.create_images_dir = getStringCopy(&command[14]);
 
     if (access(global.create_images_dir, W_OK) != 0)
-      Error(ERR_EXIT, "image target directory '%s' not found or not writable",
-           global.create_images_dir);
+      Fail("image target directory '%s' not found or not writable",
+          global.create_images_dir);
   }
   else if (strPrefix(command, "create CE image "))
   {
@@ -5172,7 +5172,7 @@ static void Execute_Command(char *command)
   }
   else
   {
-    Error(ERR_EXIT_HELP, "unrecognized command '%s'", command);
+    FailWithHelp("unrecognized command '%s'", command);
   }
 
   // disable networking if any valid command was recognized
@@ -5463,7 +5463,7 @@ static void InitGfx(void)
   }
 
   if (filename_font_initial == NULL)   // should not happen
-    Error(ERR_EXIT, "cannot get filename for '%s'", CONFIG_TOKEN_FONT_INITIAL);
+    Fail("cannot get filename for '%s'", CONFIG_TOKEN_FONT_INITIAL);
 
   InitGfxBuffers();
   InitGfxCustomArtworkInfo();
@@ -5549,7 +5549,7 @@ static void InitGfx(void)
   }
 
   if (filename_anim_initial == NULL)   // should not happen
-    Error(ERR_EXIT, "cannot get filename for '%s'", CONFIG_TOKEN_GLOBAL_BUSY);
+    Fail("cannot get filename for '%s'", CONFIG_TOKEN_GLOBAL_BUSY);
 
   anim_initial.bitmaps =
     checked_calloc(sizeof(Bitmap *) * NUM_IMG_BITMAP_POINTERS);
index 3ac1f9d55fdc5c100d29409e7fd244f367e66f94..56c359bcc1a0e636c658430e578ef1e5f6e169e5 100644 (file)
@@ -78,7 +78,7 @@ static int getNewGadgetID(void)
   }
 
   if (next_free_gadget_id <= 0)                // cannot get new gadget id
-    Error(ERR_EXIT, "too much gadgets -- this should not happen");
+    Fail("too much gadgets -- this should not happen");
 
   return id;
 }
@@ -1207,7 +1207,7 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap)
        break;
 
       default:
-       Error(ERR_EXIT, "HandleGadgetTags(): unknown tag %d", tag);
+       Fail("HandleGadgetTags(): unknown tag %d", tag);
     }
 
     tag = va_arg(ap, int);     // read next tag
@@ -1268,7 +1268,7 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap)
     gi->height = 2 * border_ysize + font_height;
 
     if (gi->selectbox.options == NULL)
-      Error(ERR_EXIT, "selectbox gadget incomplete (missing options array)");
+      Fail("selectbox gadget incomplete (missing options array)");
 
     gi->selectbox.num_values = 0;
     while (gi->selectbox.options[gi->selectbox.num_values].text != NULL)
@@ -1330,7 +1330,7 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap)
 
     if (gi->width == 0 || gi->height == 0 ||
        gs->items_max == 0 || gs->items_visible == 0)
-      Error(ERR_EXIT, "scrollbar gadget incomplete (missing tags)");
+      Fail("scrollbar gadget incomplete (missing tags)");
 
     // calculate internal scrollbar values
     gs->size_min = (gi->type == GD_TYPE_SCROLLBAR_VERTICAL ?
index b71fee31934da47516917d3dbdb9e99aee3fdd49..3946cd7337199f17c0b24ae8cb759c518a70c19b 100644 (file)
@@ -347,6 +347,15 @@ static void vLog(int log_level, char *mode, char *format, va_list ap)
   vprintf_log(format, ap);
 }
 
+static void Log(int log_level, char *mode, char *format, ...)
+{
+  va_list ap;
+
+  va_start(ap, format);
+  vLog(log_level, mode, format, ap);
+  va_end(ap);
+}
+
 void Debug(char *mode, char *format, ...)
 {
   va_list ap;
@@ -374,6 +383,46 @@ void Warn(char *format, ...)
   va_end(ap);
 }
 
+void Fail(char *format, ...)
+{
+  va_list ap;
+
+  va_start(ap, format);
+  vLog(LOG_FATAL, NULL, format, ap);
+  va_end(ap);
+
+  if (!network.is_server_thread)
+  {
+    va_start(ap, format);
+    program.exit_message_function(format, ap);
+    va_end(ap);
+  }
+
+  Log(LOG_FATAL, NULL, "aborting");
+
+  // network server thread: normal exit
+  if (network.is_server_thread)
+    exit(1);
+
+  // main process: clean up stuff
+  program.exit_function(1);
+}
+
+void FailWithHelp(char *format, ...)
+{
+  va_list ap;
+
+  va_start(ap, format);
+  vLog(LOG_FATAL, NULL, format, ap);
+  va_end(ap);
+
+  Log(LOG_FATAL, NULL, "try option '--help' for more information");
+  Log(LOG_FATAL, NULL, "aborting");
+
+  // main process: clean up stuff
+  program.exit_function(1);
+}
+
 
 // ----------------------------------------------------------------------------
 // string functions
@@ -1093,7 +1142,7 @@ void GetOptions(int argc, char *argv[],
     int option_len = strlen(option);
 
     if (option_len >= MAX_OPTION_LEN)
-      Error(ERR_EXIT_HELP, "unrecognized option '%s'", option);
+      FailWithHelp("unrecognized option '%s'", option);
 
     strcpy(option_str, option);                        // copy argument into buffer
     option = option_str;
@@ -1111,14 +1160,14 @@ void GetOptions(int argc, char *argv[],
     {
       *option_arg++ = '\0';                    // cut argument from option
       if (*option_arg == '\0')                 // no argument after '='
-       Error(ERR_EXIT_HELP, "option '%s' has invalid argument", option_str);
+       FailWithHelp("option '%s' has invalid argument", option_str);
     }
 
     option_len = strlen(option);
 
     if (strEqual(option, "-"))
     {
-      Error(ERR_EXIT_HELP, "unrecognized option '%s'", option);
+      FailWithHelp("unrecognized option '%s'", option);
     }
     else if (strncmp(option, "-help", option_len) == 0)
     {
@@ -1129,7 +1178,7 @@ void GetOptions(int argc, char *argv[],
     else if (strncmp(option, "-basepath", option_len) == 0)
     {
       if (option_arg == NULL)
-       Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
+       FailWithHelp("option '%s' requires an argument", option_str);
 
       // this should be extended to separate options for ro and rw data
       options.ro_base_directory = ro_base_path = getStringCopy(option_arg);
@@ -1148,7 +1197,7 @@ void GetOptions(int argc, char *argv[],
     else if (strncmp(option, "-levels", option_len) == 0)
     {
       if (option_arg == NULL)
-       Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
+       FailWithHelp("option '%s' requires an argument", option_str);
 
       options.level_directory = getStringCopy(option_arg);
       if (option_arg == next_option)
@@ -1157,7 +1206,7 @@ void GetOptions(int argc, char *argv[],
     else if (strncmp(option, "-graphics", option_len) == 0)
     {
       if (option_arg == NULL)
-       Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
+       FailWithHelp("option '%s' requires an argument", option_str);
 
       options.graphics_directory = getStringCopy(option_arg);
       if (option_arg == next_option)
@@ -1166,7 +1215,7 @@ void GetOptions(int argc, char *argv[],
     else if (strncmp(option, "-sounds", option_len) == 0)
     {
       if (option_arg == NULL)
-       Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
+       FailWithHelp("option '%s' requires an argument", option_str);
 
       options.sounds_directory = getStringCopy(option_arg);
       if (option_arg == next_option)
@@ -1175,7 +1224,7 @@ void GetOptions(int argc, char *argv[],
     else if (strncmp(option, "-music", option_len) == 0)
     {
       if (option_arg == NULL)
-       Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
+       FailWithHelp("option '%s' requires an argument", option_str);
 
       options.music_directory = getStringCopy(option_arg);
       if (option_arg == next_option)
@@ -1219,7 +1268,7 @@ void GetOptions(int argc, char *argv[],
     else if (strncmp(option, "-execute", option_len) == 0)
     {
       if (option_arg == NULL)
-       Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
+       FailWithHelp("option '%s' requires an argument", option_str);
 
       options.execute_command = getStringCopy(option_arg);
       if (option_arg == next_option)
@@ -1236,7 +1285,7 @@ void GetOptions(int argc, char *argv[],
 #endif
     else if (*option == '-')
     {
-      Error(ERR_EXIT_HELP, "unrecognized option '%s'", option_str);
+      FailWithHelp("unrecognized option '%s'", option_str);
     }
     else if (options.server_host == NULL)
     {
@@ -1246,10 +1295,10 @@ void GetOptions(int argc, char *argv[],
     {
       options.server_port = atoi(*options_left);
       if (options.server_port < 1024)
-       Error(ERR_EXIT_HELP, "bad port number '%d'", options.server_port);
+       FailWithHelp("bad port number '%d'", options.server_port);
     }
     else
-      Error(ERR_EXIT_HELP, "too many arguments");
+      FailWithHelp("too many arguments");
 
     options_left++;
   }
@@ -1376,7 +1425,7 @@ void *checked_malloc(unsigned int size)
   ptr = malloc(size);
 
   if (ptr == NULL)
-    Error(ERR_EXIT, "cannot allocate %d bytes -- out of memory", size);
+    Fail("cannot allocate %d bytes -- out of memory", size);
 
   return ptr;
 }
@@ -1388,7 +1437,7 @@ void *checked_calloc(unsigned int size)
   ptr = calloc(1, size);
 
   if (ptr == NULL)
-    Error(ERR_EXIT, "cannot allocate %d bytes -- out of memory", size);
+    Fail("cannot allocate %d bytes -- out of memory", size);
 
   return ptr;
 }
@@ -1398,7 +1447,7 @@ void *checked_realloc(void *ptr, unsigned int size)
   ptr = realloc(ptr, size);
 
   if (ptr == NULL)
-    Error(ERR_EXIT, "cannot allocate %d bytes -- out of memory", size);
+    Fail("cannot allocate %d bytes -- out of memory", size);
 
   return ptr;
 }
@@ -3844,9 +3893,9 @@ void debug_print_timestamp(int counter_nr, char *message)
   float timestamp_interval;
 
   if (counter_nr < 0)
-    Error(ERR_EXIT, "debugging: invalid negative counter");
+    Fail("debugging: invalid negative counter");
   else if (counter_nr >= DEBUG_NUM_TIMESTAMPS)
-    Error(ERR_EXIT, "debugging: increase DEBUG_NUM_TIMESTAMPS in misc.c");
+    Fail("debugging: increase DEBUG_NUM_TIMESTAMPS in misc.c");
 
 #if DEBUG_TIME_IN_MICROSECONDS
   static double counter[DEBUG_NUM_TIMESTAMPS][2];
index ba82dad42a4a495530cdba153eb7872085ea5522..2fb49475e4465fddd75d73c7c43a94876e2814f6 100644 (file)
@@ -126,6 +126,8 @@ void PrintLineWithPrefix(char *, char *, int);
 void Debug(char *, char *, ...);
 void Info(char *, ...);
 void Warn(char *, ...);
+void Fail(char *, ...);
+void FailWithHelp(char *, ...);
 
 char *int2str(int, int);
 char *i_to_a(unsigned int);
index ece4e3f7c0b7beb98a1608a01eead8ec3b671ab3..a66049e97e0175cf9fef962ff2518d0d7a658ee2 100644 (file)
@@ -360,7 +360,7 @@ SDL_Surface *SDLGetNativeSurface(SDL_Surface *surface)
   new_surface = SDL_ConvertSurface(surface, &format, 0);
 
   if (new_surface == NULL)
-    Error(ERR_EXIT, "SDL_ConvertSurface() failed: %s", SDL_GetError());
+    Fail("SDL_ConvertSurface() failed: %s", SDL_GetError());
 
   // workaround for a bug in SDL 2.0.12 (which does not convert the color key)
   if (SDLHasColorKey(surface) && !SDLHasColorKey(new_surface))
@@ -401,8 +401,7 @@ static SDL_Texture *SDLCreateTextureFromSurface(SDL_Surface *surface)
   SDL_Texture *texture = SDL_CreateTextureFromSurface(sdl_renderer, surface);
 
   if (texture == NULL)
-    Error(ERR_EXIT, "SDL_CreateTextureFromSurface() failed: %s",
-         SDL_GetError());
+    Fail("SDL_CreateTextureFromSurface() failed: %s", SDL_GetError());
 
   return texture;
 }
@@ -443,7 +442,7 @@ void SDLInitVideoDisplay(void)
 
   // initialize SDL video
   if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
-    Error(ERR_EXIT, "SDL_InitSubSystem() failed: %s", SDL_GetError());
+    Fail("SDL_InitSubSystem() failed: %s", SDL_GetError());
 
   // set default SDL depth
   video.default_depth = 32;    // (how to determine video depth in SDL2?)
@@ -467,7 +466,7 @@ static void SDLInitVideoBuffer_VideoBuffer(boolean fullscreen)
 
   // open SDL video output device (window or fullscreen mode)
   if (!SDLSetVideoMode(fullscreen))
-    Error(ERR_EXIT, "setting video mode failed");
+    Fail("setting video mode failed");
 
   // !!! SDL2 can only set the window icon if the window already exists !!!
   // set window icon
@@ -913,7 +912,7 @@ void SDLCreateBitmapContent(Bitmap *bitmap, int width, int height,
     SDL_CreateRGBSurface(SURFACE_FLAGS, width, height, depth, 0,0,0, 0);
 
   if (surface == NULL)
-    Error(ERR_EXIT, "SDL_CreateRGBSurface() failed: %s", SDL_GetError());
+    Fail("SDL_CreateRGBSurface() failed: %s", SDL_GetError());
 
   SDLSetNativeSurface(&surface);
 
@@ -2237,7 +2236,7 @@ static SDL_Surface *SDLGetOpaqueSurface(SDL_Surface *surface)
     return NULL;
 
   if ((new_surface = SDLGetNativeSurface(surface)) == NULL)
-    Error(ERR_EXIT, "SDLGetNativeSurface() failed");
+    Fail("SDLGetNativeSurface() failed");
 
   // remove alpha channel from native non-transparent surface, if defined
   SDLSetAlpha(new_surface, FALSE, 0);
@@ -2304,8 +2303,7 @@ Bitmap *SDLLoadImage(char *filename)
 
   // load image to temporary surface
   if ((sdl_image_tmp = IMG_Load(filename)) == NULL)
-    Error(ERR_EXIT, "IMG_Load('%s') failed: %s", getBaseNamePtr(filename),
-         SDL_GetError());
+    Fail("IMG_Load('%s') failed: %s", getBaseNamePtr(filename), SDL_GetError());
 
   print_timestamp_time("IMG_Load");
 
@@ -2313,7 +2311,7 @@ Bitmap *SDLLoadImage(char *filename)
 
   // create native non-transparent surface for current image
   if ((new_bitmap->surface = SDLGetOpaqueSurface(sdl_image_tmp)) == NULL)
-    Error(ERR_EXIT, "SDLGetOpaqueSurface() failed");
+    Fail("SDLGetOpaqueSurface() failed");
 
   print_timestamp_time("SDLGetNativeSurface (opaque)");
 
@@ -2327,7 +2325,7 @@ Bitmap *SDLLoadImage(char *filename)
 
   // create native transparent surface for current image
   if ((new_bitmap->surface_masked = SDLGetNativeSurface(sdl_image_tmp)) == NULL)
-    Error(ERR_EXIT, "SDLGetNativeSurface() failed");
+    Fail("SDLGetNativeSurface() failed");
 
   print_timestamp_time("SDLGetNativeSurface (masked)");
 
@@ -2707,11 +2705,7 @@ void SDLInitJoysticks(void)
     SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0");
 
     if (SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) < 0)
-    {
-      Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
-
-      return;
-    }
+      Fail("SDL_Init() failed: %s", SDL_GetError());
 
     num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_base);
 
index 206db77e4de949a765822011b9ddd738a68917ca..4b28476a40c18f86ef91754944d85ef13226b39a 100644 (file)
@@ -1891,7 +1891,7 @@ SetupFileHash *newSetupFileHash(void)
     create_hashtable(16, 0.75, get_hash_from_key, keys_are_equal);
 
   if (new_hash == NULL)
-    Error(ERR_EXIT, "create_hashtable() failed -- out of memory");
+    Fail("create_hashtable() failed -- out of memory");
 
   return new_hash;
 }
@@ -1924,7 +1924,7 @@ void setHashEntry(SetupFileHash *hash, char *token, char *value)
   // change value; if it does not exist, insert it as new
   if (!change_hash_entry(hash, token, value_copy))
     if (!insert_hash_entry(hash, getStringCopy(token), value_copy))
-      Error(ERR_EXIT, "cannot insert into hash -- aborting");
+      Fail("cannot insert into hash -- aborting");
 }
 
 char *removeHashEntry(SetupFileHash *hash, char *token)
@@ -3540,7 +3540,7 @@ void LoadLevelInfo(void)
   leveldir_current = getFirstValidTreeInfoEntry(leveldir_first);
 
   if (leveldir_first == NULL)
-    Error(ERR_EXIT, "cannot find any valid level series in any directory");
+    Fail("cannot find any valid level series in any directory");
 
   sortTreeInfo(&leveldir_first);
 
@@ -4053,7 +4053,7 @@ void AddTreeSetToTreeInfo(TreeInfo *tree_node, char *tree_dir,
                          char *tree_subdir_new, int type)
 {
   if (!AddTreeSetToTreeInfoExt(tree_node, tree_dir, tree_subdir_new, type))
-    Error(ERR_EXIT, "internal tree info structure corrupted -- aborting");
+    Fail("internal tree info structure corrupted -- aborting");
 }
 
 void AddUserLevelSetToLevelInfo(char *level_subdir_new)
@@ -4095,7 +4095,7 @@ TreeInfo *getArtworkTreeInfoForUserLevelSet(int type)
     ti = getTreeInfoFromIdentifier(artwork_first_node,
                                   ARTWORK_DEFAULT_SUBDIR(type));
     if (ti == NULL)
-      Error(ERR_EXIT, "cannot find default graphics -- should not happen");
+      Fail("cannot find default graphics -- should not happen");
   }
 
   return ti;
index 076ea586309c008e3332e9eb4fa49602c89fc6bb..4e500cb24174bfd6bf8eb126e0b976e7d638457c 100644 (file)
@@ -194,7 +194,7 @@ void InitPlatformDependentStuff(void)
   int sdl_init_flags = SDL_INIT_EVENTS | SDL_INIT_NOPARACHUTE;
 
   if (SDL_Init(sdl_init_flags) < 0)
-    Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
+    Fail("SDL_Init() failed: %s", SDL_GetError());
 
   SDLNet_Init();
 }
@@ -1157,10 +1157,10 @@ Bitmap *LoadCustomImage(char *basename)
   Bitmap *new_bitmap;
 
   if (filename == NULL)
-    Error(ERR_EXIT, "LoadCustomImage(): cannot find file '%s'", basename);
+    Fail("LoadCustomImage(): cannot find file '%s'", basename);
 
   if ((new_bitmap = LoadImage(filename)) == NULL)
-    Error(ERR_EXIT, "LoadImage('%s') failed: %s", basename, GetError());
+    Fail("LoadImage('%s') failed: %s", basename, GetError());
 
   return new_bitmap;
 }
index dbec20df90e98aac1882d7e875d555310db2d49a..c10583d3564ec2baea82324cb8cb9545627bad42 100644 (file)
@@ -169,7 +169,7 @@ void DrawTextF(int x, int y, int font_nr, char *format, ...)
   va_end(ap);
 
   if (strlen(buffer) > MAX_OUTPUT_LINESIZE)
-    Error(ERR_EXIT, "string too long in DrawTextF() -- aborting");
+    Fail("string too long in DrawTextF() -- aborting");
 
   DrawText(gfx.sx + x, gfx.sy + y, buffer, font_nr);
 }
@@ -184,7 +184,7 @@ void DrawTextFCentered(int y, int font_nr, char *format, ...)
   va_end(ap);
 
   if (strlen(buffer) > MAX_OUTPUT_LINESIZE)
-    Error(ERR_EXIT, "string too long in DrawTextFCentered() -- aborting");
+    Fail("string too long in DrawTextFCentered() -- aborting");
 
   DrawText(gfx.sx + (gfx.sxsize - getTextWidth(buffer, font_nr)) / 2,
           gfx.sy + y, buffer, font_nr);
index 9ed0291c5d43745741b974c46fa08d915e1e1208..1f0663fdd71fbaa292118c7d6a18ab8fb1f99ce6 100644 (file)
@@ -864,28 +864,22 @@ void NetworkServer(int port, int serveronly)
 #endif
 
   if (SDLNet_ResolveHost(&ip, NULL, port) == -1)
-    Error(ERR_EXIT_NETWORK_SERVER, "SDLNet_ResolveHost() failed: %s",
-          SDLNet_GetError());
+    Fail("SDLNet_ResolveHost() failed: %s", SDLNet_GetError());
 
   if ((fds = SDLNet_AllocSocketSet(MAX_PLAYERS + 1 + 1)) == NULL)
-    Error(ERR_EXIT_NETWORK_SERVER, "SDLNet_AllocSocketSet() failed: %s"),
-      SDLNet_GetError();
+    Fail("SDLNet_AllocSocketSet() failed: %s"), SDLNet_GetError();
 
   if ((lfd = SDLNet_TCP_Open(&ip)) == NULL)
-    Error(ERR_EXIT_NETWORK_SERVER, "SDLNet_TCP_Open() failed: %s"),
-      SDLNet_GetError();
+    Fail("SDLNet_TCP_Open() failed: %s"), SDLNet_GetError();
 
   if (SDLNet_TCP_AddSocket(fds, lfd) == -1)
-    Error(ERR_EXIT_NETWORK_SERVER, "SDLNet_TCP_AddSocket() failed: %s"),
-      SDLNet_GetError();
+    Fail("SDLNet_TCP_AddSocket() failed: %s"), SDLNet_GetError();
 
   if ((udp = SDLNet_UDP_Open(port)) == NULL)
-    Error(ERR_EXIT_NETWORK_SERVER, "SDLNet_UDP_Open() failed: %s",
-          SDLNet_GetError());
+    Fail("SDLNet_UDP_Open() failed: %s", SDLNet_GetError());
 
   if (SDLNet_UDP_AddSocket(fds, udp) == -1)
-    Error(ERR_EXIT_NETWORK_SERVER, "SDLNet_TCP_AddSocket() failed: %s"),
-      SDLNet_GetError();
+    Fail("SDLNet_TCP_AddSocket() failed: %s"), SDLNet_GetError();
 
   Debug("network:server", "started up, listening on port %d", port);
   Debug("network:server", "using protocol version %d.%d.%d",
index a21c16e71062308923e551b7dd5962b0d8f05020..2905dc5737c6f0d94e33f22740162acbf38e4fff 100644 (file)
@@ -151,8 +151,7 @@ static struct NetworkClientPlayerInfo *getNetworkPlayer(int player_nr)
       break;
 
   if (player == NULL)  // should not happen
-    Error(ERR_EXIT, "protocol error: reference to non-existing player %d",
-         player_nr);
+    Fail("protocol error: reference to non-existing player %d", player_nr);
 
   return player;
 }
@@ -217,15 +216,14 @@ boolean ConnectToServer(char *hostname, int port)
 
     SDLNet_SocketSet udp_socket_set = SDLNet_AllocSocketSet(1);
     if (!udp_socket_set)
-      Error(ERR_EXIT, "SDLNet_AllocSocketSet() failed: %s"), SDLNet_GetError();
+      Fail("SDLNet_AllocSocketSet() failed: %s"), SDLNet_GetError();
 
     udp = SDLNet_UDP_Open(0);
     if (!udp)
-      Error(ERR_EXIT, "SDLNet_UDP_Open() failed: %s", SDLNet_GetError());
+      Fail("SDLNet_UDP_Open() failed: %s", SDLNet_GetError());
 
     if (SDLNet_UDP_AddSocket(udp_socket_set, udp) == -1)
-      Error(ERR_EXIT_NETWORK_SERVER, "SDLNet_TCP_AddSocket() failed: %s"),
-        SDLNet_GetError();
+      Fail("SDLNet_TCP_AddSocket() failed: %s"), SDLNet_GetError();
 
     char *data_ptr = "network server UDB broadcast";
     int data_len = strlen(data_ptr) + 1;
@@ -548,7 +546,7 @@ static void Handle_OP_YOUR_NUMBER(void)
   }
 
   if (first_player.nr > MAX_PLAYERS)
-    Error(ERR_EXIT, "sorry, more than %d players not allowed", MAX_PLAYERS);
+    Fail("sorry, more than %d players not allowed", MAX_PLAYERS);
 
   Debug("network:client", "you get client # %d", new_client_nr);
 
@@ -641,7 +639,7 @@ static void Handle_OP_PLAYER_CONNECTED(void)
   for (player = &first_player; player; player = player->next)
   {
     if (player->nr == new_client_nr)
-      Error(ERR_EXIT, "multiplayer server sent duplicate player id");
+      Fail("multiplayer server sent duplicate player id");
 
     last_player = player;
   }
@@ -856,7 +854,7 @@ static void Handle_OP_LEVEL_FILE(void)
   leveldir_identifier = getStringCopy(getNetworkBufferString(read_buffer));
 
   if (hasPathSeparator(leveldir_identifier))
-    Error(ERR_EXIT, "protocol error: invalid filename from network client");
+    Fail("protocol error: invalid filename from network client");
 
   InitNetworkLevelDirectory(leveldir_identifier);
 
@@ -869,7 +867,7 @@ static void Handle_OP_LEVEL_FILE(void)
   file_info->filename = getPath2(network_level_dir, file_info->basename);
 
   if (hasPathSeparator(file_info->basename))
-    Error(ERR_EXIT, "protocol error: invalid filename from network client");
+    Fail("protocol error: invalid filename from network client");
 
   int num_bytes = getNetworkBufferFile(read_buffer, file_info->filename);
 
@@ -886,7 +884,7 @@ static void Handle_OP_LEVEL_FILE(void)
     tmpl_info->filename = getPath2(network_level_dir, tmpl_info->basename);
 
     if (hasPathSeparator(tmpl_info->basename))
-      Error(ERR_EXIT, "protocol error: invalid filename from network client");
+      Fail("protocol error: invalid filename from network client");
 
     getNetworkBufferFile(read_buffer, tmpl_info->filename);
 
index 421238bebf31da5c0e423d6764cb15d1efe4b75d..41292512d1b1436b7871eb32e14bf32deb674735 100644 (file)
@@ -8714,7 +8714,7 @@ static void CreateScreenMenubuttons(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     screen_gadget[id] = gi;
   }
@@ -8782,7 +8782,7 @@ static void CreateScreenScrollbuttons(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     screen_gadget[id] = gi;
   }
@@ -8863,7 +8863,7 @@ static void CreateScreenScrollbars(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     screen_gadget[id] = gi;
   }
@@ -8909,7 +8909,7 @@ static void CreateScreenTextInputGadgets(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     screen_gadget[id] = gi;
   }
index 5e7bca1539bc172b7bdbc83b123e78f61d2a883b..ac96ef96aa09e4721dc7c6f3e181b2356bdb951f 100644 (file)
@@ -1324,8 +1324,7 @@ void AutoPlayTapes(void)
                                                  global.autoplay_leveldir);
 
     if (autoplay_leveldir == NULL)
-      Error(ERR_EXIT, "no such level identifier: '%s'",
-           global.autoplay_leveldir);
+      Fail("no such level identifier: '%s'", global.autoplay_leveldir);
 
     leveldir_current = autoplay_leveldir;
 
@@ -1567,8 +1566,7 @@ void PatchTapes(void)
                                                  global.patchtapes_leveldir);
 
   if (patchtapes_leveldir == NULL)
-    Error(ERR_EXIT, "no such level identifier: '%s'",
-         global.patchtapes_leveldir);
+    Fail("no such level identifier: '%s'", global.patchtapes_leveldir);
 
   leveldir_current = patchtapes_leveldir;
 
@@ -1713,7 +1711,7 @@ void CreateTapeButtons(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     tape_gadget[id] = gi;
   }
index b3eacd95c820c533847ab7fc21e61b45ed01d7c1..2c30df83c7fcdfcadf99faf69565b9e00cd0cb28 100644 (file)
@@ -1468,7 +1468,7 @@ void FloodFillLevelExt(int from_x, int from_y, int fill_element,
   safety++;
 
   if (safety > max_fieldx * max_fieldy)
-    Error(ERR_EXIT, "Something went wrong in 'FloodFill()'. Please debug.");
+    Fail("Something went wrong in 'FloodFill()'. Please debug.");
 
   old_element = field[from_x][from_y];
   field[from_x][from_y] = fill_element;
@@ -5680,7 +5680,7 @@ void CreateToolButtons(void)
                      GDI_END);
 
     if (gi == NULL)
-      Error(ERR_EXIT, "cannot create gadget");
+      Fail("cannot create gadget");
 
     tool_gadget[id] = gi;
   }