summaryrefslogtreecommitdiff
path: root/apps/plugins/puzzles/malloc.c
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2016-11-20 15:16:41 -0500
committerFranklin Wei <me@fwei.tk>2016-12-18 18:13:22 +0100
commit1a6a8b52f7aa4e2da6f4c34a0c743c760b8cfd99 (patch)
tree8e7f2d6b0cbdb5d15c13457b2c3e1de69f598440 /apps/plugins/puzzles/malloc.c
parent3ee79724f6fb033d50e26ef37b33d3f8cedf0c5b (diff)
downloadrockbox-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.c61
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
14int allocs = 0;
15int frees = 0;
16
17void *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 */
29void 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 */
40void *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 */
57char *dupstr(const char *s) {
58 char *r = smalloc(1+strlen(s));
59 strcpy(r,s);
60 return r;
61}