summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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