diff options
Diffstat (limited to 'lib/skin_parser/skin_buffer.c')
-rw-r--r-- | lib/skin_parser/skin_buffer.c | 38 |
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 */ | 30 | static size_t buf_size; |
29 | static unsigned char buffer[SKIN_BUFFER_SIZE]; | 31 | static unsigned char *buffer_start = NULL; |
30 | static unsigned char *buffer_front = NULL; /* start of the free space, | 32 | static unsigned char *buffer_front = NULL; |
31 | increases with allocation*/ | ||
32 | #endif | 33 | #endif |
33 | 34 | ||
34 | void skin_buffer_init(void) | 35 | void 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) | |||
46 | void* skin_buffer_alloc(size_t size) | 44 | void* 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 */ |
63 | size_t skin_buffer_usage(void) | 63 | size_t skin_buffer_usage(void) |
64 | { | 64 | { |
65 | return buffer_front - buffer; | 65 | return buffer_front - buffer_start; |
66 | } | 66 | } |
67 | size_t skin_buffer_freespace(void) | 67 | size_t skin_buffer_freespace(void) |
68 | { | 68 | { |
69 | return SKIN_BUFFER_SIZE - skin_buffer_usage(); | 69 | return buf_size - skin_buffer_usage(); |
70 | } | ||
71 | |||
72 | static unsigned char *saved_buffer_pos = NULL; | ||
73 | void skin_buffer_save_position(void) | ||
74 | { | ||
75 | saved_buffer_pos = buffer_front; | ||
76 | } | ||
77 | |||
78 | void skin_buffer_restore_position(void) | ||
79 | { | ||
80 | if (saved_buffer_pos) | ||
81 | buffer_front = saved_buffer_pos; | ||
70 | } | 82 | } |
71 | #endif | 83 | #endif |