aboutsummaryrefslogtreecommitdiff
path: root/src/sc_interp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sc_interp.c')
-rw-r--r--src/sc_interp.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/sc_interp.c b/src/sc_interp.c
index 7bbfeeb..f2f604b 100644
--- a/src/sc_interp.c
+++ b/src/sc_interp.c
@@ -105,19 +105,44 @@ SCCallbackList *sc_callback_list_new()
if ( cbl == NULL ) return NULL;
cbl->names = calloc(8, sizeof(char *));
- if ( cbl->names == NULL ) return NULL;
+ if ( cbl->names == NULL ) {
+ free(cbl);
+ return NULL;
+ }
cbl->box_funcs = calloc(8, sizeof(cbl->box_funcs[0]));
- if ( cbl->box_funcs == NULL ) return NULL;
+ if ( cbl->box_funcs == NULL ) {
+ free(cbl->names);
+ free(cbl);
+ return NULL;
+ }
cbl->draw_funcs = calloc(8, sizeof(cbl->draw_funcs[0]));
- if ( cbl->draw_funcs == NULL ) return NULL;
+ if ( cbl->draw_funcs == NULL ) {
+ free(cbl->box_funcs);
+ free(cbl->names);
+ free(cbl);
+ return NULL;
+ }
cbl->click_funcs = calloc(8, sizeof(cbl->click_funcs[0]));
- if ( cbl->click_funcs == NULL ) return NULL;
+ if ( cbl->click_funcs == NULL ) {
+ free(cbl->draw_funcs);
+ free(cbl->box_funcs);
+ free(cbl->names);
+ free(cbl);
+ return NULL;
+ }
cbl->vps = calloc(8, sizeof(cbl->vps[0]));
- if ( cbl->vps == NULL ) return NULL;
+ if ( cbl->vps == NULL ) {
+ free(cbl->click_funcs);
+ free(cbl->draw_funcs);
+ free(cbl->box_funcs);
+ free(cbl->names);
+ free(cbl);
+ return NULL;
+ }
cbl->max_callbacks = 8;
cbl->n_callbacks = 0;
@@ -978,13 +1003,14 @@ static void output_frame(SCInterpreter *scin, SCBlock *bl, Stylesheet *ss,
char *result;
fr = add_subframe(sc_interp_get_frame(scin));
- fr->scblocks = bl;
- fr->resizable = 1;
if ( fr == NULL ) {
fprintf(stderr, _("Failed to add frame.\n"));
return;
}
+ fr->scblocks = bl;
+ fr->resizable = 1;
+
/* Lowest priority: current state of interpreter */
set_frame_default_style(fr, scin);