1 // Place the code and data below here into the LIBXBMS section.
3 #pragma code_seg( "LIBXBMS" )
4 #pragma data_seg( "LIBXBMS_RW" )
5 #pragma bss_seg( "LIBXBMS_RW" )
6 #pragma const_seg( "LIBXBMS_RD" )
7 #pragma comment(linker, "/merge:LIBXBMS_RW=LIBXBMS")
8 #pragma comment(linker, "/merge:LIBXBMS_RD=LIBXBMS")
12 * ----------------------------------------------------------------------
14 * ----------------------------------------------------------------------
16 * Copyright (c) 2002-2003 by PuhPuh
18 * This code is copyrighted property of the author. It can still
19 * be used for any non-commercial purpose following conditions:
21 * 1) This copyright notice is not removed.
22 * 2) Source code follows any distribution of the software
24 * 3) Copyright notice above is found in the documentation
25 * of the distributed software.
27 * Any express or implied warranties are disclaimed. Author is
28 * not liable for any direct or indirect damages caused by the use
31 * ----------------------------------------------------------------------
33 * This code has been integrated into XBMC Media Center.
34 * As such it can me copied, redistributed and modified under
35 * the same conditions as the XBMC itself.
40 #include "ccincludes.h"
43 CcBuffer cc_buffer_allocate(void)
47 buffer = cc_xcalloc(1, sizeof (*buffer));
51 void cc_buffer_free(CcBuffer buffer)
53 cc_buffer_uninit(buffer);
57 void cc_buffer_init(CcBuffer buffer)
59 memset(buffer, 0, sizeof (*buffer));
62 void cc_buffer_uninit(CcBuffer buffer)
65 cc_xfree(buffer->data);
66 memset(buffer, 0, sizeof (*buffer));
69 size_t cc_buffer_len(CcBuffer buffer)
74 unsigned char *cc_buffer_ptr(CcBuffer buffer)
79 void cc_buffer_append(CcBuffer buffer, const unsigned char *data, size_t len)
83 ol = cc_buffer_len(buffer);
84 cc_buffer_append_space(buffer, len);
85 memcpy(buffer->data + ol, data, len);
88 void cc_buffer_prepend(CcBuffer buffer, const unsigned char *data, size_t len)
92 ol = cc_buffer_len(buffer);
93 cc_buffer_append_space(buffer, len);
94 memmove(buffer->data + len, buffer->data, ol);
95 memcpy(buffer->data, data, len);
98 void cc_buffer_append_space(CcBuffer buffer, size_t len)
102 if (buffer->data == NULL)
104 buffer->data = cc_xmalloc(len);
109 buffer->data = cc_xrealloc(buffer->data, buffer->len + len);
115 void cc_buffer_append_string(CcBuffer buffer, const char *string)
118 cc_buffer_append(buffer, (const unsigned char *)string, strlen(string));
121 void cc_buffer_prepend_string(CcBuffer buffer, const char *string)
124 cc_buffer_prepend(buffer, (const unsigned char *)string, strlen(string));
127 void cc_buffer_consume(CcBuffer buffer, size_t len)
129 if (len > buffer->len)
131 cc_fatal("Buffer underflow.");
137 else if (len == buffer->len)
143 memmove(buffer->data, buffer->data + len, buffer->len - len);
148 void cc_buffer_consume_end(CcBuffer buffer, size_t len)
150 if (len > buffer->len)
152 cc_fatal("Buffer underflow.");
158 else if (len == buffer->len)
168 void cc_buffer_clear(CcBuffer buffer)
173 void cc_buffer_steal(CcBuffer buffer, unsigned char **data, size_t *len)
175 buffer->data = cc_xrealloc(buffer->data, buffer->len + 1);
176 buffer->data[buffer->len] = '\0';
177 *data = buffer->data;
184 /* eof (ccbuffer.c) */