Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/lib/skin_parser/skin_buffer.c b/lib/skin_parser/skin_buffer.c
- index ecfe04b..9aa43ab 100644
- --- a/lib/skin_parser/skin_buffer.c
- +++ b/lib/skin_parser/skin_buffer.c
- @@ -27,16 +27,50 @@
- #include "skin_buffer.h"
- #ifdef ROCKBOX
- +# if (CONFIG_PLATFORM&PLATFORM_HOSTED)
- +# define USE_HOST_MALLOC
- +# else
- +# define USE_ROCKBOX_ALLOC
- +# endif
- +#endif
- +
- +#ifdef USE_ROCKBOX_ALLOC
- static size_t buf_size;
- static unsigned char *buffer_start = NULL;
- static unsigned char *buffer_front = NULL;
- #endif
- +#ifdef USE_HOST_MALLOC
- +
- +struct malloc_object {
- + void* object;
- + struct malloc_object *next;
- +};
- +struct malloc_object *first = NULL, *last = NULL;
- +
- +void skin_free_malloced(void)
- +{
- + struct malloc_object *obj = first, this;
- + while (obj)
- + {
- + this = obj;
- + obj = this->next;
- + free(this->object);
- + free(this->next);
- + }
- + first = NULL;
- + last = NULL;
- +}
- +
- +#endif
- +
- void skin_buffer_init(char* buffer, size_t size)
- {
- -#if defined(ROCKBOX)
- +#ifdef USE_ROCKBOX_ALLOC
- buffer_start = buffer_front = buffer;
- buf_size = size;
- +#elif defined(USE_HOST_MALLOC)
- + skin_free_malloced();
- #endif
- }
- @@ -44,13 +78,22 @@ void skin_buffer_init(char* buffer, size_t size)
- void* skin_buffer_alloc(size_t size)
- {
- void *retval = NULL;
- -#ifdef ROCKBOX
- +#ifdef USE_ROCKBOX_ALLOC
- /* 32-bit aligned */
- size = (size + 3) & ~3;
- if (size > skin_buffer_freespace())
- return NULL;
- retval = buffer_front;
- buffer_front += size;
- +#elif defined(USE_HOST_MALLOC)
- + struct malloc_object *obj = malloc(sizeof (struct malloc_object));
- + obj->object = malloc(size);
- + obj->next = NULL;
- + if (last == NULL)
- + first = last = obj;
- + else
- + last->next = obj;
- + retval = obj->object;
- #else
- retval = malloc(size);
- #endif
- @@ -58,7 +101,7 @@ void* skin_buffer_alloc(size_t size)
- }
- -#ifdef ROCKBOX
- +#ifdef USE_ROCKBOX_ALLOC
- /* get the number of bytes currently being used */
- size_t skin_buffer_usage(void)
- {
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement