110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_growable_buffer.c 310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * a growable buffer implementation 410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2007 OProfile authors 610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING 710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie 910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_growable_buffer.h" 1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_libiberty.h" 1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <string.h> 1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <stdlib.h> 1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid init_buffer(struct growable_buffer * b) 1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project b->max_size = 0; 2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project b->size = 0; 2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project b->p = NULL; 2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid free_buffer(struct growable_buffer * b) 2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project free(b->p); 2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic void grow_buffer(struct growable_buffer * b) 3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project size_t new_size = (b->max_size + b->size) * 2; 3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project b->p = xrealloc(b->p, new_size); 3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project b->max_size = new_size; 3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid add_data(struct growable_buffer * b, void const * data, size_t len) 4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project size_t old_size = b->size; 4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project b->size += len; 4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (b->size > b->max_size) 4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project grow_buffer(b); 4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project memcpy(b->p + old_size, data, len); 4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 47