summaryrefslogtreecommitdiff
path: root/lib/skin_parser/skin_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/skin_parser/skin_buffer.c')
-rw-r--r--lib/skin_parser/skin_buffer.c38
1 files changed, 25 insertions, 13 deletions
diff --git a/lib/skin_parser/skin_buffer.c b/lib/skin_parser/skin_buffer.c
index 05cdc0ce03..69d9d273bd 100644
--- a/lib/skin_parser/skin_buffer.c
+++ b/lib/skin_parser/skin_buffer.c
@@ -24,21 +24,19 @@
24#include <string.h> 24#include <string.h>
25#include <stdlib.h> 25#include <stdlib.h>
26 26
27#include "skin_buffer.h"
28
27#ifdef ROCKBOX 29#ifdef ROCKBOX
28#define SKIN_BUFFER_SIZE (400*1024) /* Excessivly large for now */ 30static size_t buf_size;
29static unsigned char buffer[SKIN_BUFFER_SIZE]; 31static unsigned char *buffer_start = NULL;
30static unsigned char *buffer_front = NULL; /* start of the free space, 32static unsigned char *buffer_front = NULL;
31 increases with allocation*/
32#endif 33#endif
33 34
34void skin_buffer_init(void) 35void skin_buffer_init(char* buffer, size_t size)
35{ 36{
36#if defined(ROCKBOX) 37#if defined(ROCKBOX)
37 { 38 buffer_start = buffer_front = buffer;
38 /* reset the buffer.... */ 39 buf_size = size;
39 buffer_front = buffer;
40 //TODO: buf_size = size;
41 }
42#endif 40#endif
43} 41}
44 42
@@ -46,7 +44,9 @@ void skin_buffer_init(void)
46void* skin_buffer_alloc(size_t size) 44void* skin_buffer_alloc(size_t size)
47{ 45{
48 void *retval = NULL; 46 void *retval = NULL;
49#ifdef ROCKBOX 47#ifdef ROCKBOX
48 if (size > skin_buffer_freespace())
49 return NULL;
50 retval = buffer_front; 50 retval = buffer_front;
51 buffer_front += size; 51 buffer_front += size;
52 /* 32-bit aligned */ 52 /* 32-bit aligned */
@@ -62,10 +62,22 @@ void* skin_buffer_alloc(size_t size)
62/* get the number of bytes currently being used */ 62/* get the number of bytes currently being used */
63size_t skin_buffer_usage(void) 63size_t skin_buffer_usage(void)
64{ 64{
65 return buffer_front - buffer; 65 return buffer_front - buffer_start;
66} 66}
67size_t skin_buffer_freespace(void) 67size_t skin_buffer_freespace(void)
68{ 68{
69 return SKIN_BUFFER_SIZE - skin_buffer_usage(); 69 return buf_size - skin_buffer_usage();
70}
71
72static unsigned char *saved_buffer_pos = NULL;
73void skin_buffer_save_position(void)
74{
75 saved_buffer_pos = buffer_front;
76}
77
78void skin_buffer_restore_position(void)
79{
80 if (saved_buffer_pos)
81 buffer_front = saved_buffer_pos;
70} 82}
71#endif 83#endif