diff --git a/frontend/frontend.c b/frontend/frontend.c index f44136d7bc..fb4b6e2beb 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -276,38 +276,37 @@ void main_exit(args_type() args) driver.frontend_ctx->shutdown(false); } -static void free_args(struct rarch_main_wrap *wrap_args, - char *argv_copy[]) +static void free_args(struct rarch_main_wrap *wrap_args, char **argv_copy, unsigned argv_size) { - int i; + unsigned i; if (!wrap_args->touched) return; - for (i = 0; i < ARRAY_SIZE(argv_copy); i++) - if (argv_copy[i]) - free(argv_copy[i]); + for (i = 0; i < argv_size; i++) + free(argv_copy[i]); } returntype main_entry(signature()) { - int ret, rarch_argc; - char *rarch_argv[MAX_ARGS], *argv_copy[MAX_ARGS]; int *rarch_argc_ptr; char **rarch_argv_ptr; struct rarch_main_wrap *wrap_args; declare_argc(); declare_argv(); args_type() args = (args_type())args_initial_ptr(); + int ret, rarch_argc = 0; + char *rarch_argv[MAX_ARGS] = {NULL}; + char *argv_copy[MAX_ARGS] = {NULL}; wrap_args = (struct rarch_main_wrap*)calloc(1, sizeof(*wrap_args)); + rarch_assert(wrap_args); + driver.frontend_ctx = (frontend_ctx_driver_t*)frontend_ctx_init_first(); rarch_argv_ptr = (char**)argv; rarch_argc_ptr = (int*)&argc; if (!driver.frontend_ctx) - { RARCH_WARN("Frontend context could not be initialized.\n"); - } if (driver.frontend_ctx && driver.frontend_ctx->init) driver.frontend_ctx->init(args); @@ -355,7 +354,7 @@ returntype main_entry(signature()) if ((ret = rarch_main_init(*rarch_argc_ptr, rarch_argv_ptr))) { - free_args(wrap_args, argv_copy); + free_args(wrap_args, argv_copy, ARRAY_SIZE(argv_copy)); free(wrap_args); return_var(ret); } @@ -379,7 +378,7 @@ returntype main_entry(signature()) #endif if (wrap_args) - free_args(wrap_args, argv_copy); + free_args(wrap_args, argv_copy, ARRAY_SIZE(argv_copy)); free(wrap_args); #if defined(HAVE_MENU) diff --git a/retroarch.c b/retroarch.c index 05d42a2a4a..300156d441 100644 --- a/retroarch.c +++ b/retroarch.c @@ -3201,6 +3201,7 @@ void rarch_main_deinit(void) void rarch_main_init_wrap(const struct rarch_main_wrap *args, int *argc, char **argv) { + *argc = 0; argv[(*argc)++] = strdup("retroarch"); if (!args->no_rom)