summaryrefslogtreecommitdiff
path: root/lib/skin_parser
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2010-11-06 14:18:33 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2010-11-06 14:18:33 +0000
commitc98e525f297dd6757bf3c81ee6a625b86dbdecf5 (patch)
tree3979eb407693f7a3bb18bb457b406b557fe85951 /lib/skin_parser
parent781f05e40d987941e3ac374ea29083a4570c8394 (diff)
downloadrockbox-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')
-rw-r--r--lib/skin_parser/skin_buffer.c12
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
65struct malloc_object { 65struct malloc_object {
66 void* object;
67 struct malloc_object *next; 66 struct malloc_object *next;
67 char buf[0];
68}; 68};
69static struct malloc_object *malloced_head = NULL, *malloced_tail = NULL; 69static 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