diff options
author | Franklin Wei <frankhwei536@gmail.com> | 2016-11-20 15:16:41 -0500 |
---|---|---|
committer | Franklin Wei <me@fwei.tk> | 2016-12-18 18:13:22 +0100 |
commit | 1a6a8b52f7aa4e2da6f4c34a0c743c760b8cfd99 (patch) | |
tree | 8e7f2d6b0cbdb5d15c13457b2c3e1de69f598440 /apps/plugins/puzzles/malloc.c | |
parent | 3ee79724f6fb033d50e26ef37b33d3f8cedf0c5b (diff) | |
download | rockbox-1a6a8b52f7aa4e2da6f4c34a0c743c760b8cfd99.tar.gz rockbox-1a6a8b52f7aa4e2da6f4c34a0c743c760b8cfd99.zip |
Port of Simon Tatham's Puzzle Collection
Original revision: 5123b1bf68777ffa86e651f178046b26a87cf2d9
MIT Licensed. Some games still crash and others are unplayable due to
issues with controls. Still need a "real" polygon filling algorithm.
Currently builds one plugin per puzzle (about 40 in total, around 100K
each on ARM), but can easily be made to build a single monolithic
overlay (800K or so on ARM).
The following games are at least partially broken for various reasons,
and have been disabled on this commit:
Cube: failed assertion with "Icosahedron" setting
Keen: input issues
Mines: weird stuff happens on target
Palisade: input issues
Solo: input issues, occasional crash on target
Towers: input issues
Undead: input issues
Unequal: input and drawing issues (concave polys)
Untangle: input issues
Features left to do:
- In-game help system
- Figure out the weird bugs
Change-Id: I7c69b6860ab115f973c8d76799502e9bb3d52368
Diffstat (limited to 'apps/plugins/puzzles/malloc.c')
-rw-r--r-- | apps/plugins/puzzles/malloc.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/apps/plugins/puzzles/malloc.c b/apps/plugins/puzzles/malloc.c new file mode 100644 index 0000000000..d9943c6b40 --- /dev/null +++ b/apps/plugins/puzzles/malloc.c | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * malloc.c: safe wrappers around malloc, realloc, free, strdup | ||
3 | */ | ||
4 | |||
5 | #include <stdlib.h> | ||
6 | #include <string.h> | ||
7 | #include "puzzles.h" | ||
8 | |||
9 | /* | ||
10 | * smalloc should guarantee to return a useful pointer - Halibut | ||
11 | * can do nothing except die when it's out of memory anyway. | ||
12 | */ | ||
13 | |||
14 | int allocs = 0; | ||
15 | int frees = 0; | ||
16 | |||
17 | void *smalloc(size_t size) { | ||
18 | void *p; | ||
19 | p = malloc(size); | ||
20 | LOGF("allocs: %d", ++allocs); | ||
21 | if (!p) | ||
22 | fatal("out of memory"); | ||
23 | return p; | ||
24 | } | ||
25 | |||
26 | /* | ||
27 | * sfree should guaranteeably deal gracefully with freeing NULL | ||
28 | */ | ||
29 | void sfree(void *p) { | ||
30 | if (p) { | ||
31 | ++frees; | ||
32 | LOGF("frees: %d, total outstanding: %d", frees, allocs - frees); | ||
33 | free(p); | ||
34 | } | ||
35 | } | ||
36 | |||
37 | /* | ||
38 | * srealloc should guaranteeably be able to realloc NULL | ||
39 | */ | ||
40 | void *srealloc(void *p, size_t size) { | ||
41 | void *q; | ||
42 | if (p) { | ||
43 | q = realloc(p, size); | ||
44 | } else { | ||
45 | LOGF("allocs: %d", ++allocs); | ||
46 | q = malloc(size); | ||
47 | } | ||
48 | if (!q) | ||
49 | fatal("out of memory"); | ||
50 | return q; | ||
51 | } | ||
52 | |||
53 | /* | ||
54 | * dupstr is like strdup, but with the never-return-NULL property | ||
55 | * of smalloc (and also reliably defined in all environments :-) | ||
56 | */ | ||
57 | char *dupstr(const char *s) { | ||
58 | char *r = smalloc(1+strlen(s)); | ||
59 | strcpy(r,s); | ||
60 | return r; | ||
61 | } | ||