--- psiconv/trunk/lib/psiconv/data.c 2001/01/17 12:04:12 95 +++ psiconv/trunk/lib/psiconv/data.c 2001/01/29 21:57:05 98 @@ -43,6 +43,7 @@ static psiconv_word_status_section psiconv_empty_word_status_section(void); static psiconv_word_f psiconv_empty_word_f(void); static psiconv_sheet_status_section psiconv_empty_sheet_status_section(void); +static psiconv_formula_list psiconv_empty_formula_list(void); static psiconv_sheet_workbook_section psiconv_empty_sheet_workbook_section(void); static psiconv_sheet_f psiconv_empty_sheet_f(void); @@ -546,10 +547,25 @@ free(section); } +/* TODO: Free sublists, strings etc. depending on formula->type */ +void psiconv_free_formula(psiconv_formula formula) +{ + if (formula) + free(formula); +} + +void psiconv_free_formula_list(psiconv_formula_list list) +{ + if (list) + psiconv_list_free(list); +} + void psiconv_free_sheet_workbook_section(psiconv_sheet_workbook_section section) { - if (section) + if (section) { + psiconv_free_formula_list(section->formulas); free(section); + } } void psiconv_free_sheet_f(psiconv_sheet_f file) @@ -964,14 +980,26 @@ return result; } +psiconv_formula_list psiconv_empty_formula_list(void) +{ + return psiconv_list_new(sizeof(struct psiconv_formula_s)); +} + psiconv_sheet_workbook_section psiconv_empty_sheet_workbook_section(void) { psiconv_sheet_workbook_section result; if (!(result = malloc(sizeof(*result)))) - return NULL; + goto ERROR1; + if (!(result->formulas = psiconv_empty_formula_list())) + goto ERROR2; return result; +ERROR2: + free(result); +ERROR1: + return NULL; } + psiconv_sheet_f psiconv_empty_sheet_f(void) { psiconv_sheet_f result;