]>
Dogcows Code - chaz/yoink/blob - src/yajl_buf.c
2 * Copyright 2007-2009, Lloyd Hilaiel.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
16 * 3. Neither the name of Lloyd Hilaiel nor the names of its
17 * contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
24 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
39 #define YAJL_BUF_INIT_SIZE 2048
45 yajl_alloc_funcs
* alloc
;
49 void yajl_buf_ensure_available(yajl_buf buf
, unsigned int want
)
56 if (buf
->data
== NULL
) {
57 buf
->len
= YAJL_BUF_INIT_SIZE
;
58 buf
->data
= (unsigned char *) YA_MALLOC(buf
->alloc
, buf
->len
);
64 while (want
>= (need
- buf
->used
)) need
<<= 1;
66 if (need
!= buf
->len
) {
67 buf
->data
= (unsigned char *) YA_REALLOC(buf
->alloc
, buf
->data
, need
);
72 yajl_buf
yajl_buf_alloc(yajl_alloc_funcs
* alloc
)
74 yajl_buf b
= YA_MALLOC(alloc
, sizeof(struct yajl_buf_t
));
75 memset((void *) b
, 0, sizeof(struct yajl_buf_t
));
80 void yajl_buf_free(yajl_buf buf
)
83 if (buf
->data
) YA_FREE(buf
->alloc
, buf
->data
);
84 YA_FREE(buf
->alloc
, buf
);
87 void yajl_buf_append(yajl_buf buf
, const void * data
, unsigned int len
)
89 yajl_buf_ensure_available(buf
, len
);
92 memcpy(buf
->data
+ buf
->used
, data
, len
);
94 buf
->data
[buf
->used
] = 0;
98 void yajl_buf_clear(yajl_buf buf
)
101 if (buf
->data
) buf
->data
[buf
->used
] = 0;
104 const unsigned char * yajl_buf_data(yajl_buf buf
)
109 unsigned int yajl_buf_len(yajl_buf buf
)
115 yajl_buf_truncate(yajl_buf buf
, unsigned int len
)
117 assert(len
<= buf
->used
);
This page took 0.037398 seconds and 4 git commands to generate.