From: Christian Heller Date: Mon, 25 Nov 2013 03:05:33 +0000 (+0100) Subject: Some code-stylistic improvements to rexit library; also moved exit_trouble() into it. X-Git-Tag: tce~910 X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/static/%7B%7B%20web_path%20%7D%7D/decks/%7B%7Btodo.date%7D%7D?a=commitdiff_plain;h=00a7727e37e2d80ff115f03e7971a92c66edcd96;p=plomrogue Some code-stylistic improvements to rexit library; also moved exit_trouble() into it. --- diff --git a/src/command_db.c b/src/command_db.c index 7e60b1d..fd7f4dc 100644 --- a/src/command_db.c +++ b/src/command_db.c @@ -7,7 +7,8 @@ #include /* for strlen(), strtok() */ #include "main.h" /* for world global */ #include "readwrite.h" /* for textfile_sizes(), try_fopen(), try_fclose() */ -#include "misc.h" /* for try_malloc(), exit_trouble */ +#include "misc.h" /* for try_malloc() */ +#include "rexit.h" /* exit_trouble() */ diff --git a/src/main.c b/src/main.c index 4571438..9bb983d 100644 --- a/src/main.c +++ b/src/main.c @@ -41,7 +41,7 @@ int main(int argc, char *argv[]) init_command_db(); set_cleanup_flag(CLEANUP_COMMAND_DB); init_map_object_actions(); - set_cleanup_flag(CLEANUP_MAPOBJACTS); + set_cleanup_flag(CLEANUP_MAP_OBJECT_ACTS); /* Check for corrupted savefile / recordfile savings. */ char * recordfile = "record"; diff --git a/src/misc.c b/src/misc.c index 06c6a30..2cf9e62 100644 --- a/src/misc.c +++ b/src/misc.c @@ -16,7 +16,7 @@ #include "map.h" /* for Map struct, is_passable() */ #include "main.h" /* for world global */ #include "yx_uint16.h" /* for yx_uint16 struct */ -#include "rexit.h" /* for exit_err() */ +#include "rexit.h" /* for exit_err(), exit_trouble() */ #include "wincontrol.h" /* for init_winconfs(), init_wins(), free_winconfs(), * sorted_wintoggle_and_activate() */ @@ -34,21 +34,6 @@ extern uint16_t rrand() -extern void exit_trouble(uint8_t test, char * parent, char * child) -{ - char * p1 = "Trouble in "; - char * p2 = " with "; - char * p3 = "."; - uint16_t size = strlen(p1) + strlen(parent) + strlen(p2) + strlen(child) - + strlen(p3) + 1; - char msg[size]; - exit_err(NULL == msg, "malloc() in trouble_msg() failed."); - sprintf(msg, "%s%s%s%s%s", p1, parent, p2, child, p3); - exit_err(test, msg); -} - - - extern void * try_malloc(size_t size, char * f) { void * p = malloc(size); diff --git a/src/misc.h b/src/misc.h index ddc6be6..24f36b5 100644 --- a/src/misc.h +++ b/src/misc.h @@ -20,9 +20,6 @@ struct Map; */ extern uint16_t rrand(); -/* Do exit_err() with message: "Trouble in ".parent." with ".child."." */ -extern void exit_trouble(uint8_t test, char * parent, char * child); - /* Wrappers to malloc(), calloc() from function called "f" calling exit_err() * with trouble_msg() error message if necessary. */ diff --git a/src/readwrite.c b/src/readwrite.c index 531409e..e5db306 100644 --- a/src/readwrite.c +++ b/src/readwrite.c @@ -7,8 +7,7 @@ #include /* for uint8_t, uint16_t, uint32_t */ #include /* for strlen()*/ #include /* for unlink() */ -#include "rexit.h" /* for exit_err() */ -#include "misc.h" /* for exit_trouble() */ +#include "rexit.h" /* for exit_err(), exit_trouble() */ #include "main.h" /* for world global */ diff --git a/src/rexit.c b/src/rexit.c index 691cb68..f79eac7 100644 --- a/src/rexit.c +++ b/src/rexit.c @@ -2,14 +2,14 @@ #include "rexit.h" #include /* for exit(), free(), defines EXIT_SUCESS, EXIT_FAILURE */ -#include /* for printf(), perror() */ +#include /* for printf(), perror(), sprintf() */ #include /* for uint8_t */ +#include /* for strlen() */ #include /* for errno */ #include "main.h" /* for world global */ -#include "map.h" /* for Map struct */ -#include "keybindings.h" /* for free_keybindings() */ +#include "map.h" /* for Map struct ("free(world.map->cells)") */ #include "command_db.h" /* for free_command_db() */ -#include "windows.h" /* for Win struct, free_winmeta_and_endwin() */ +#include "windows.h" /* for free_winmeta_and_endwin() */ #include "map_objects.h" /* for free_map_objects, free_map_object_defs() */ #include "misc.h" /* for unload_interface_conf() */ #include "map_object_actions.h" /* for free_map_object_actions() */ @@ -24,14 +24,6 @@ static void cleanup(); static void cleanup() { - if (cleanup_flags & CLEANUP_MAP_OBJECTS) - { - free_map_objects(world.map_objs); - } - if (cleanup_flags & CLEANUP_MAP_OBJECT_DEFS) - { - free_map_object_defs(world.map_obj_defs); - } if (cleanup_flags & CLEANUP_LOG) { free(world.log); @@ -40,21 +32,29 @@ static void cleanup() { free_command_db(); } - if (cleanup_flags & CLEANUP_MAPOBJACTS) - { - free_map_object_actions(world.map_obj_acts); - } if (cleanup_flags & CLEANUP_MAP) { free(world.map->cells); } - if (cleanup_flags & CLEANUP_INTERFACE) + if (cleanup_flags & CLEANUP_MAP_OBJECTS) + { + free_map_objects(world.map_objs); + } + if (cleanup_flags & CLEANUP_MAP_OBJECT_DEFS) { - unload_interface_conf(); + free_map_object_defs(world.map_obj_defs); } - if (cleanup_flags & CLEANUP_NCURSES) + if (cleanup_flags & CLEANUP_MAP_OBJECT_ACTS) { - free_winmeta_and_endwin(); + free_map_object_actions(world.map_obj_acts); + } + if (cleanup_flags & CLEANUP_INTERFACE) /* Only cleaning-up order */ + { /* dependency known so far: */ + unload_interface_conf(); /* unload_interface_conf() must */ + } /* come before */ + if (cleanup_flags & CLEANUP_NCURSES) /* free_winmeta_and_endwin() */ + { /* since it depends on world.wmeta */ + free_winmeta_and_endwin(); /* for closing all windows. */ } } @@ -94,3 +94,17 @@ extern void exit_err(uint8_t err, char * msg) } exit(EXIT_FAILURE); } + + + +extern void exit_trouble(uint8_t err, char * parent, char * child) +{ + char * p1 = "Trouble in "; + char * p2 = " with "; + char * p3 = "."; + uint16_t size = strlen(p1) + strlen(parent) + strlen(p2) + strlen(child) + + strlen(p3) + 1; + char msg[size]; + sprintf(msg, "%s%s%s%s%s", p1, parent, p2, child, p3); + exit_err(err, msg); +} diff --git a/src/rexit.h b/src/rexit.h index ab8e8ec..1c5c59d 100644 --- a/src/rexit.h +++ b/src/rexit.h @@ -7,8 +7,6 @@ #ifndef REXIT_H #define REXIT_H - - #include /* for uint8_t */ @@ -19,20 +17,20 @@ */ enum cleanup_flag { - CLEANUP_NCURSES = 0x0001, - CLEANUP_MAP = 0x0002, - CLEANUP_LOG = 0x0004, - CLEANUP_COMMAND_DB = 0x0008, - CLEANUP_MAPOBJACTS = 0x0010, - CLEANUP_MAP_OBJECTS = 0x0020, - CLEANUP_MAP_OBJECT_DEFS = 0x0040, - CLEANUP_INTERFACE = 0x0080 + CLEANUP_LOG = 0x0001, + CLEANUP_COMMAND_DB = 0x0002, + CLEANUP_MAP = 0x0004, + CLEANUP_MAP_OBJECTS = 0x0008, + CLEANUP_MAP_OBJECT_DEFS = 0x0010, + CLEANUP_MAP_OBJECT_ACTS = 0x0020, + CLEANUP_INTERFACE = 0x0040, + CLEANUP_NCURSES = 0x0080 }; extern void set_cleanup_flag(enum cleanup_flag flag); -/* Exit orderly, clean up. */ +/* Exit orderly, clean up in an order respecting resource dependencies. */ extern void exit_game(); /* If "err" == 0, do nothing. Else, clean up and exit with an error message that @@ -42,6 +40,9 @@ extern void exit_game(); */ extern void exit_err(uint8_t err, char * msg); +/* Do exit_err() with "msg" as: "Trouble in ".parent." with ".child."." */ +extern void exit_trouble(uint8_t err, char * parent, char * child); + #endif diff --git a/src/wincontrol.c b/src/wincontrol.c index aa705ec..4eca93b 100644 --- a/src/wincontrol.c +++ b/src/wincontrol.c @@ -12,7 +12,7 @@ #include "readwrite.h" /* for get_linemax(), try_fopen(), try_fclose(), * try_fgets(), try_fclose_unlink_rename(), try_fwrite() */ -#include "rexit.h" /* for exit_err() */ +#include "rexit.h" /* for exit_err(), exit_trouble() */ #include "draw_wins.h" /* for draw_win_map(), draw_win_info(), draw_win_log(), * draw_win_available_keybindings(), * draw_win_inventory(), draw_win_keybindings_global(), @@ -20,7 +20,7 @@ * draw_win_keybindings_winconf_keybindings(), * draw_winconf_geometry(), draw_winconf_keybindings() */ -#include "misc.h" /* for try_malloc(), exit_trouble() */ +#include "misc.h" /* for try_malloc() */ #include "dirent.h" /* for opendir(), closedir(), readdir() */ #include "errno.h" /* for errno */ #include "keybindings.h" /* for KeyBinding struct, free_keybindings() */