src/string_list.c

changeset 81
54515e5d60f5
parent 57
68018eac46c3
child 82
44b3332dfe03
equal deleted inserted replaced
80:55dc85743dd1 81:54515e5d60f5
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */ 25 */
26 26
27 #include "string_list.h" 27 #include "string_list.h"
28 28
29 #include <assert.h>
30
29 string_list_t* new_string_list_t() { 31 string_list_t* new_string_list_t() {
30 string_list_t* stringList = malloc(sizeof(string_list_t)); 32 string_list_t* stringList = malloc(sizeof(string_list_t));
31 stringList->count = 0; 33 stringList->count = 0;
32 stringList->items = NULL; 34 stringList->capacity = 32;
35 stringList->items = calloc(sizeof(char*), stringList->capacity);
33 36
34 return stringList; 37 return stringList;
35 } 38 }
36 39
37 void destroy_string_list_t(string_list_t* list) { 40 void destroy_string_list_t(string_list_t* list) {
46 /* Adds an item to the list, if a NULL-list is specified, the item will 49 /* Adds an item to the list, if a NULL-list is specified, the item will
47 * be freed. This way a NULL-list can be used as garbage bin. 50 * be freed. This way a NULL-list can be used as garbage bin.
48 */ 51 */
49 void add_string(string_list_t* list, char* item) { 52 void add_string(string_list_t* list, char* item) {
50 if (list) { 53 if (list) {
54 if (list->count < list->capacity) {
55 list->items[list->count++] = item;
56 return;
57 }
58 size_t newCapacity = list->capacity * 2;
51 char** reallocated_list = 59 char** reallocated_list =
52 realloc(list->items, sizeof(char*) * (list->count + 1)); 60 realloc(list->items, sizeof(char*) * newCapacity);
53 if (reallocated_list != NULL) { 61 assert(reallocated_list != NULL);
54 list->items = reallocated_list; 62 list->capacity = newCapacity;
55 list->items[list->count] = item; 63 list->items = reallocated_list;
56 list->count++; 64 list->items[list->count++] = item;
57 }
58 } else { 65 } else {
59 free(item); 66 free(item);
60 } 67 }
61 } 68 }
62 69

mercurial