diff options
Diffstat (limited to 'sink.c')
-rw-r--r-- | sink.c | 36 |
1 files changed, 34 insertions, 2 deletions
@@ -7,6 +7,9 @@ #include "sink_input.h" #include "sink.h" +/* + * return an initilized sink + */ sink_info* sink_init(void) { sink_info* sink = (sink_info*) calloc(1, sizeof(sink_info)); @@ -16,13 +19,13 @@ sink_info* sink_init(void) { sink->input_max = 1; sink->input_list = NULL; - sink_input_list_init(sink->input_list, sink->input_max); + sink->input_list = sink_input_list_init(sink->input_max); return sink; } /* - * free's sink + * frees all components of a sink */ void sink_clear(sink_info* sink) { @@ -32,4 +35,33 @@ void sink_clear(sink_info* sink) { sink_input_list_clear(sink->input_list, &sink->input_max); free(sink); + sink = NULL; +} + +void sink_check_list(sink_info* sink) { + + if (sink->input_counter >= sink->input_max) + sink_input_list_enlarge(sink->input_list, &sink->input_max, sink->input_counter); +} + +sink_info** sink_list_init(int max) { + + sink_info** sink_list = (sink_info**) calloc(max, sizeof(sink_info*)); + + for (int i = 0; i < max; ++i) + sink_list[i] = NULL; + + return sink_list; +} + +void sink_list_clear(sink_info** sink_list, int* max) { + + for (int i = 0; i < (*max); ++i) + if (sink_list[i] != NULL) + sink_clear(sink_list[i]); + + (*max) = 0; + + free(sink_list); + sink_list = NULL; } |