1
0
Fork 0

Fix allocs in graphics_controller

This commit is contained in:
hpi1 2017-06-10 14:33:14 +03:00
parent 02d1d21163
commit 3be8ac1bec
2 changed files with 8 additions and 18 deletions

View File

@ -83,7 +83,7 @@ struct graphics_controller_s {
unsigned popup_visible;
unsigned valid_mouse_position;
unsigned auto_action_triggered;
BOG_DATA *bog_data;
BOG_DATA bog_data[MAX_NUM_BOGS];
BOG_DATA *saved_bog_data;
BD_UO_MASK page_uo_mask;
@ -359,10 +359,6 @@ static void _reset_user_timeout(GRAPHICS_CONTROLLER *gc)
static int _save_page_state(GRAPHICS_CONTROLLER *gc)
{
if (!gc->bog_data) {
GC_TRACE("_save_page_state(): no bog data !\n");
return -1;
}
if (!gc->igs || !gc->igs->ics) {
GC_TRACE("_save_page_state(): no IG composition\n");
return -1;
@ -383,7 +379,7 @@ static int _save_page_state(GRAPHICS_CONTROLLER *gc)
/* copy enabled button state, clear draw state */
X_FREE(gc->saved_bog_data);
gc->saved_bog_data = calloc(page->num_bogs, sizeof(*gc->saved_bog_data));
gc->saved_bog_data = calloc(1, sizeof(gc->bog_data));
if (!gc->saved_bog_data) {
GC_ERROR("_save_page_state(): out of memory\n");
return -1;
@ -403,13 +399,8 @@ static int _restore_page_state(GRAPHICS_CONTROLLER *gc)
gc->out_effects = NULL;
if (gc->saved_bog_data) {
if (gc->bog_data) {
GC_ERROR("_restore_page_state(): bog data already exists !\n");
X_FREE(gc->bog_data);
}
gc->bog_data = gc->saved_bog_data;
gc->saved_bog_data = NULL;
memcpy(gc->bog_data, gc->saved_bog_data, sizeof(gc->bog_data));
X_FREE(gc->saved_bog_data);
return 1;
}
return -1;
@ -429,10 +420,7 @@ static void _reset_page_state(GRAPHICS_CONTROLLER *gc)
return;
}
size_t size = page->num_bogs * sizeof(*gc->bog_data);
gc->bog_data = realloc(gc->bog_data, size);
memset(gc->bog_data, 0, size);
memset(gc->bog_data, 0, sizeof(gc->bog_data));
for (ii = 0; ii < page->num_bogs; ii++) {
gc->bog_data[ii].enabled_button = page->bog[ii].default_valid_button_id_ref;
@ -753,7 +741,7 @@ static void _gc_reset(GRAPHICS_CONTROLLER *gc)
gc->next_dialog_idx = 0;
gc->textst_user_style = -1;
X_FREE(gc->bog_data);
memset(gc->bog_data, 0, sizeof(gc->bog_data));
}
/*

View File

@ -94,6 +94,8 @@ typedef struct bd_ig_effect_sequence_s {
} BD_IG_EFFECT_SEQUENCE;
#define MAX_NUM_BOGS 256
typedef struct bd_ig_page_s {
uint8_t id;
uint8_t version;