blob: d138f36ef4b656540b0b5c8ef25e2ea19651c94e [file] [log] [blame]
The Android Open Source Project10e23ee2009-03-03 19:30:30 -08001/**
2 * @file op_growable_buffer.c
3 * a growable buffer implementation
4 *
5 * @remark Copyright 2007 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author Philippe Elie
9 */
10
11#include "op_growable_buffer.h"
12#include "op_libiberty.h"
13
14#include <string.h>
15#include <stdlib.h>
16
17void init_buffer(struct growable_buffer * b)
18{
19 b->max_size = 0;
20 b->size = 0;
21 b->p = NULL;
22}
23
24
25void free_buffer(struct growable_buffer * b)
26{
27 free(b->p);
28}
29
30
31static void grow_buffer(struct growable_buffer * b)
32{
33 size_t new_size = (b->max_size + b->size) * 2;
34 b->p = xrealloc(b->p, new_size);
35 b->max_size = new_size;
36}
37
38
39void add_data(struct growable_buffer * b, void const * data, size_t len)
40{
41 size_t old_size = b->size;
42 b->size += len;
43 if (b->size > b->max_size)
44 grow_buffer(b);
45 memcpy(b->p + old_size, data, len);
46}