home · contact · privacy
2e7ab83ab534840f6f979eecdd78fb43e14e7028
[plomrogue] / src / server / cleanup.c
1 /* src/server/cleanup.c */
2
3 #include "cleanup.h"
4 #include <stdint.h> /* uint32_t */
5 #include <stdlib.h> /* free() */
6 #include <unistd.h> /* unlink() */
7 #include "../common/readwrite.h" /* try_fclose() */
8 #include "hardcoded_strings.h" /* s */
9 #include "thing_actions.h" /* free_thing_actions() */
10 #include "things.h" /* free_things(), free_thing_types() */
11 #include "world.h" /* global world */
12
13
14
15
16 /* The clean-up flags set by set_cleanup_flag(). */
17 static uint32_t cleanup_flags = 0x0000;
18
19
20
21 extern void cleanup()
22 {
23     char * f_name = "cleanup()";
24     free(world.queue);
25     free(world.log);
26     free(world.map.cells);
27     if (cleanup_flags & CLEANUP_WORLDSTATE)
28     {
29         unlink(s[S_PATH_WORLDSTATE]);
30     }
31     if (cleanup_flags & CLEANUP_THINGS)
32     {
33         free_things(world.things);
34     }
35     if (cleanup_flags & CLEANUP_THING_TYPES)
36     {
37         free_thing_types(world.thing_types);
38     }
39     if (cleanup_flags & CLEANUP_THING_ACTIONS)
40     {
41         free_thing_actions(world.thing_actions);
42     }
43     if (cleanup_flags & CLEANUP_IN)
44     {
45         try_fclose(world.file_in, f_name);
46         unlink(s[S_PATH_IN]);
47     }
48     if (cleanup_flags & CLEANUP_OUT)
49     {
50         try_fclose(world.file_out, f_name);
51         free(world.server_test);
52         unlink(s[S_PATH_OUT]);
53     }
54 }
55
56
57 extern void set_cleanup_flag(enum cleanup_flag flag)
58 {
59     cleanup_flags = cleanup_flags | flag;
60 }
61
62
63
64 extern void unset_cleanup_flag(enum cleanup_flag flag)
65 {
66     cleanup_flags = cleanup_flags ^ flag;
67 }