summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--blastem.c2
-rw-r--r--config.c1
-rw-r--r--genesis.c2
-rw-r--r--m68k_core.c7
-rw-r--r--nuklear_ui/blastem_nuklear.c2
-rw-r--r--nuklear_ui/font.c1
-rwxr-xr-xrender_sdl.c17
-rw-r--r--romdb.c1
8 files changed, 32 insertions, 1 deletions
diff --git a/blastem.c b/blastem.c
index 138532b..bc94462 100644
--- a/blastem.c
+++ b/blastem.c
@@ -389,6 +389,7 @@ void init_system_with_media(const char *path, system_type force_stype)
game_system->next_context = menu_system;
setup_saves(&cart, &info, game_system);
update_title(info.name);
+ free(info.name);
}
int main(int argc, char ** argv)
@@ -620,6 +621,7 @@ int main(int argc, char ** argv)
setup_saves(&cart, &info, current_system);
update_title(info.name);
+ free(info.name);
if (menu) {
menu_system = current_system;
} else {
diff --git a/config.c b/config.c
index 9595313..2fc965c 100644
--- a/config.c
+++ b/config.c
@@ -198,6 +198,7 @@ uint8_t serialize_config_file(tern_node *config, char *path)
uint32_t buf_size;
char *buffer = serialize_config(config, &buf_size);
uint8_t ret = buf_size == fwrite(buffer, 1, buf_size, f);
+ free(buffer);
fclose(f);
return ret;
}
diff --git a/genesis.c b/genesis.c
index 3fc9895..942ee38 100644
--- a/genesis.c
+++ b/genesis.c
@@ -1188,7 +1188,9 @@ static void free_genesis(system_header *system)
{
genesis_context *gen = (genesis_context *)system;
vdp_free(gen->vdp);
+ memmap_chunk *map = (memmap_chunk *)gen->m68k->options->gen.memmap;
m68k_options_free(gen->m68k->options);
+ free(map);//needs to happen after m68k_options_free as that function uses the memory map
free(gen->cart);
free(gen->m68k);
free(gen->work_ram);
diff --git a/m68k_core.c b/m68k_core.c
index a118b18..56013e7 100644
--- a/m68k_core.c
+++ b/m68k_core.c
@@ -468,7 +468,11 @@ static code_ptr get_movem_impl(m68k_options *opts, m68kinst *inst)
}
}
if (opts->num_movem == opts->movem_storage) {
- opts->movem_storage *= 2;
+ if (!opts->movem_storage) {
+ opts->movem_storage = 4;
+ } else {
+ opts->movem_storage *= 2;
+ }
opts->big_movem = realloc(opts->big_movem, sizeof(movem_fun) * opts->movem_storage);
}
if (!opts->extra_code.cur) {
@@ -1205,6 +1209,7 @@ void m68k_options_free(m68k_options *opts)
free(opts->gen.ram_inst_sizes[i]);
}
free(opts->gen.ram_inst_sizes);
+ free(opts->big_movem);
free(opts);
}
diff --git a/nuklear_ui/blastem_nuklear.c b/nuklear_ui/blastem_nuklear.c
index 3621718..d347e54 100644
--- a/nuklear_ui/blastem_nuklear.c
+++ b/nuklear_ui/blastem_nuklear.c
@@ -616,6 +616,7 @@ void settings_int_input(struct nk_context *context, char *label, char *path, cha
len = 11;
}
memcpy(buffer, curstr, len);
+ memset(buffer+len, 0, sizeof(buffer)-len);
nk_edit_string(context, NK_EDIT_SIMPLE, buffer, &len, sizeof(buffer)-1, nk_filter_decimal);
buffer[len] = 0;
if (strcmp(buffer, curstr)) {
@@ -1068,6 +1069,7 @@ static void texture_init(void)
fatal_error("Failed to find default font path\n");
}
def_font = nk_font_atlas_add_from_memory(atlas, font, font_size, render_height() / 16, NULL);
+ free(font);
nk_sdl_font_stash_end();
nk_style_set_font(context, &def_font->handle);
if (controller_360_buf) {
diff --git a/nuklear_ui/font.c b/nuklear_ui/font.c
index 006ae48..ff86847 100644
--- a/nuklear_ui/font.c
+++ b/nuklear_ui/font.c
@@ -35,6 +35,7 @@ uint8_t *default_font(uint32_t *size_out)
goto error;
}
FILE *f = fopen(path, "rb");
+ free(path);
if (!f) {
goto error;
}
diff --git a/render_sdl.c b/render_sdl.c
index d743de2..3296581 100755
--- a/render_sdl.c
+++ b/render_sdl.c
@@ -541,6 +541,15 @@ static void gl_setup()
un_height = glGetUniformLocation(program, "height");
at_pos = glGetAttribLocation(program, "pos");
}
+
+static void gl_teardown()
+{
+ glDeleteProgram(program);
+ glDeleteShader(vshader);
+ glDeleteShader(fshader);
+ glDeleteBuffers(2, buffers);
+ glDeleteTextures(3, textures);
+}
#endif
static uint8_t texture_init;
@@ -588,6 +597,12 @@ static void render_quit()
{
render_close_audio();
free_surfaces();
+#ifndef DISABLE_OPENGL
+ if (render_gl) {
+ gl_teardown();
+ SDL_GL_DeleteContext(main_context);
+ }
+#endif
}
static float config_aspect()
@@ -866,6 +881,7 @@ static int32_t handle_event(SDL_Event *event)
if (on_context_destroyed) {
on_context_destroyed();
}
+ gl_teardown();
SDL_GL_DeleteContext(main_context);
main_context = SDL_GL_CreateContext(main_window);
gl_setup();
@@ -1148,6 +1164,7 @@ void render_config_updated(void)
if (on_context_destroyed) {
on_context_destroyed();
}
+ gl_teardown();
SDL_GL_DeleteContext(main_context);
} else {
#endif
diff --git a/romdb.c b/romdb.c
index 35e833f..04dd22b 100644
--- a/romdb.c
+++ b/romdb.c
@@ -608,6 +608,7 @@ void map_iter_fun(char *key, tern_val val, uint8_t valtype, void *data)
}
if (matching_chunks == 0) {
//Nothing mapped in the relevant range for the lock-on cart, ignore this mapping
+ free_rom_info(&lock_info);
return;
} else if (matching_chunks > 1) {
state->info->map_chunks += matching_chunks - 1;