diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2010-11-06 14:18:33 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2010-11-06 14:18:33 +0000 |
commit | c98e525f297dd6757bf3c81ee6a625b86dbdecf5 (patch) | |
tree | 3979eb407693f7a3bb18bb457b406b557fe85951 /lib/skin_parser/skin_buffer.c | |
parent | 781f05e40d987941e3ac374ea29083a4570c8394 (diff) | |
download | rockbox-c98e525f297dd6757bf3c81ee6a625b86dbdecf5.tar.gz rockbox-c98e525f297dd6757bf3c81ee6a625b86dbdecf5.zip |
Half the number of malloc() calls on APPLICATION builds in skin_buffer_alloc(). these are still presumably wasteing alot of RAM and could be merged further
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28520 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'lib/skin_parser/skin_buffer.c')
-rw-r--r-- | lib/skin_parser/skin_buffer.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/lib/skin_parser/skin_buffer.c b/lib/skin_parser/skin_buffer.c index 3c0870ea5a..0f72f768dd 100644 --- a/lib/skin_parser/skin_buffer.c +++ b/lib/skin_parser/skin_buffer.c | |||
@@ -63,8 +63,8 @@ static unsigned char *buffer_front = NULL; | |||
63 | #ifdef USE_HOST_MALLOC | 63 | #ifdef USE_HOST_MALLOC |
64 | 64 | ||
65 | struct malloc_object { | 65 | struct malloc_object { |
66 | void* object; | ||
67 | struct malloc_object *next; | 66 | struct malloc_object *next; |
67 | char buf[0]; | ||
68 | }; | 68 | }; |
69 | static struct malloc_object *malloced_head = NULL, *malloced_tail = NULL; | 69 | static struct malloc_object *malloced_head = NULL, *malloced_tail = NULL; |
70 | 70 | ||
@@ -76,7 +76,6 @@ static void skin_free_malloced(void) | |||
76 | { | 76 | { |
77 | this = obj; | 77 | this = obj; |
78 | obj = this->next; | 78 | obj = this->next; |
79 | free(this->object); | ||
80 | free(this); | 79 | free(this); |
81 | } | 80 | } |
82 | malloced_head = NULL; | 81 | malloced_head = NULL; |
@@ -108,17 +107,16 @@ void* skin_buffer_alloc(size_t size) | |||
108 | retval = buffer_front; | 107 | retval = buffer_front; |
109 | buffer_front += size; | 108 | buffer_front += size; |
110 | #elif defined(USE_HOST_MALLOC) | 109 | #elif defined(USE_HOST_MALLOC) |
111 | struct malloc_object *obj = malloc(sizeof (struct malloc_object)); | 110 | size_t malloc_size = sizeof(struct malloc_object) + size; |
112 | if (!obj) | 111 | struct malloc_object *obj = malloc(malloc_size); |
113 | return NULL; | 112 | retval = &obj->buf; |
114 | obj->object = malloc(size); | ||
115 | obj->next = NULL; | 113 | obj->next = NULL; |
116 | if (malloced_tail == NULL) | 114 | if (malloced_tail == NULL) |
117 | malloced_head = malloced_tail = obj; | 115 | malloced_head = malloced_tail = obj; |
118 | else | 116 | else |
119 | malloced_tail->next = obj; | 117 | malloced_tail->next = obj; |
120 | malloced_tail = obj; | 118 | malloced_tail = obj; |
121 | retval = obj->object; | 119 | |
122 | #else | 120 | #else |
123 | retval = malloc(size); | 121 | retval = malloc(size); |
124 | #endif | 122 | #endif |