]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/libstack/string_array.c
more tweaking to point to the right header files, etc.
[OpenSRF.git] / src / libstack / string_array.c
1 #include "string_array.h"
2
3 /*
4 int main() {
5         string_array* arr = init_string_array(1);
6         string_array_add(arr, "1");
7         fprintf(stderr,"adding 3\n");
8         string_array_add(arr, "3");
9         string_array_destroy(arr);
10         return 0;
11 }
12 */
13
14
15
16 string_array* init_string_array(int size) {
17         if(size > STRING_ARRAY_MAX_SIZE)
18                 fatal_handler("init_string_array size is too large");
19
20         string_array* arr = 
21                 (string_array*) safe_malloc(sizeof(string_array));
22         arr->array = (char**) safe_malloc(size * sizeof(char*));
23         arr->size = 0;
24         arr->arr_size = size;
25         return arr;
26 }
27
28
29 void string_array_add(string_array* arr, char* str) {
30         if(arr == NULL || str == NULL ) {
31                 warning_handler("Invalid params to string_array_add");
32                 return;
33         }
34
35         if( strlen(str) < 1 ) return;
36
37         arr->size++;
38         //fprintf(stderr,"size is %d\n", arr->size);
39
40         if( arr->size > STRING_ARRAY_MAX_SIZE ) 
41                 fatal_handler("string_array_add size is too large");
42
43         /* if necessary, double capacity */
44         if(arr->size >= arr->arr_size) {
45                 arr->arr_size *= 2;
46                 debug_handler("string_array: Doubling array size to %d", arr->arr_size);
47                 char** tmp = (char**) safe_malloc(arr->arr_size * sizeof(char*));
48                 int i;
49
50                 /* copy the string pointers over */
51                 for( i = 0; i!= arr->size; i++ ) 
52                         tmp[i] = arr->array[i];
53
54                 free(arr->array);
55                 arr->array = tmp;
56         }
57
58         //fprintf(stderr, "String is %s", str);
59         //debug_handler("string_array_add: Adding string %s", str);
60         //arr->array[arr->size - 1] = (char*) safe_malloc(strlen(str));
61         arr->array[arr->size - 1] = strdup(str);
62         //fprintf(stderr,"we have %s\n", arr->array[arr->size - 1]);
63 }
64
65 char* string_array_get_string(string_array* arr, int index) {
66         if(!arr || index < 0 || index >= arr->size )
67                 return NULL;
68         char* str = arr->array[index]; 
69
70         if(str == NULL)
71                 warning_handler("Somehow we have a NULL string in the string array");
72
73         //debug_handler("string_array_get_string: getting string %s", str);
74         return str;
75 }
76
77
78 void string_array_destroy(string_array* arr) {
79         if(!arr) return;
80         int i;
81         for( i = 0; i!= arr->size; i++ ) {
82                 if( arr->array[i] != NULL ) {
83                         //debug_handler("Freeing string from string array %s", arr->array[i]);
84                         free(arr->array[i]);
85                 }
86         }
87         free(arr->array);
88         free(arr);
89 }