mirror of
https://github.com/libretro/RetroArch
synced 2025-03-30 16:20:27 +00:00
Setup main_entry and environment_get for proper building of
argc/argv for console/mobile ports with non-conformant argc/argv input values
This commit is contained in:
parent
3ad7f76cd8
commit
29a3a46e73
@ -276,14 +276,32 @@ void main_exit(args_type() args)
|
||||
driver.frontend_ctx->shutdown(false);
|
||||
}
|
||||
|
||||
static void free_args(struct rarch_main_wrap *wrap_args,
|
||||
char *argv_copy[])
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(argv_copy); i++)
|
||||
if (argv_copy[i])
|
||||
free(argv_copy[i]);
|
||||
|
||||
free(wrap_args);
|
||||
}
|
||||
|
||||
returntype main_entry(signature())
|
||||
{
|
||||
int ret;
|
||||
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();
|
||||
|
||||
wrap_args = NULL;
|
||||
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)
|
||||
{
|
||||
@ -298,7 +316,7 @@ returntype main_entry(signature())
|
||||
|
||||
if (driver.frontend_ctx && driver.frontend_ctx->environment_get)
|
||||
{
|
||||
driver.frontend_ctx->environment_get(&argc, argv, args);
|
||||
driver.frontend_ctx->environment_get(rarch_argc_ptr, rarch_argv_ptr, args, wrap_args);
|
||||
#if defined(RARCH_CONSOLE) || defined(RARCH_MOBILE)
|
||||
if (*default_paths.autoconfig_dir)
|
||||
path_mkdir(default_paths.autoconfig_dir);
|
||||
@ -323,13 +341,30 @@ returntype main_entry(signature())
|
||||
if (*default_paths.system_dir)
|
||||
path_mkdir(default_paths.system_dir);
|
||||
#endif
|
||||
|
||||
if (wrap_args)
|
||||
{
|
||||
rarch_main_init_wrap(wrap_args, &rarch_argc, rarch_argv);
|
||||
|
||||
if (rarch_argc > 0)
|
||||
{
|
||||
memcpy(argv_copy, rarch_argv, sizeof(rarch_argv));
|
||||
rarch_argv_ptr = (char**)rarch_argv;
|
||||
rarch_argc_ptr = (int*)&rarch_argc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((ret = rarch_main_init(argc, argv))) return_var(ret);
|
||||
if ((ret = rarch_main_init(*rarch_argc_ptr, rarch_argv_ptr)))
|
||||
{
|
||||
free_args(wrap_args, argv_copy);
|
||||
return_var(ret);
|
||||
}
|
||||
|
||||
#if defined(HAVE_MENU)
|
||||
if (driver.frontend_ctx && driver.frontend_ctx->process_args)
|
||||
ret = driver.frontend_ctx->process_args(&argc, argv, args);
|
||||
ret = driver.frontend_ctx->process_args(rarch_argc_ptr, rarch_argv_ptr, args);
|
||||
|
||||
|
||||
g_extern.lifecycle_state |= (1ULL << MODE_GAME);
|
||||
|
||||
@ -342,7 +377,12 @@ returntype main_entry(signature())
|
||||
if (!g_extern.libretro_dummy)
|
||||
menu_rom_history_push_current();
|
||||
}
|
||||
#endif
|
||||
|
||||
if (wrap_args)
|
||||
free_args(wrap_args, argv_copy);
|
||||
|
||||
#if defined(HAVE_MENU)
|
||||
while (!main_entry_iterate(signature_expand(), args));
|
||||
#else
|
||||
while ((g_extern.is_paused && !g_extern.is_oneshot) ? rarch_main_idle_iterate() : rarch_main_iterate());
|
||||
|
@ -29,7 +29,8 @@ extern "C" {
|
||||
|
||||
typedef struct frontend_ctx_driver
|
||||
{
|
||||
void (*environment_get)(int *argc, char *argv[], void *args);
|
||||
void (*environment_get)(int *argc, char *argv[], void *args,
|
||||
void *params_data);
|
||||
|
||||
void (*init)(void *data);
|
||||
void (*deinit)(void *data);
|
||||
|
@ -89,7 +89,10 @@ static void find_first_libretro_core(char *first_file,
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
void *args = NULL;
|
||||
struct rarch_main_wrap *wrap_args;
|
||||
|
||||
frontend_ctx_driver_t *frontend_ctx = (frontend_ctx_driver_t*)frontend_ctx_init_first();
|
||||
wrap_args = NULL;
|
||||
|
||||
if (!frontend_ctx)
|
||||
return 0;
|
||||
@ -98,7 +101,7 @@ int main(int argc, char *argv[])
|
||||
frontend_ctx->init(args);
|
||||
|
||||
if (frontend_ctx && frontend_ctx->environment_get)
|
||||
frontend_ctx->environment_get(&argc, argv, args);
|
||||
frontend_ctx->environment_get(&argc, argv, args, wrap_args);
|
||||
|
||||
if (frontend_ctx && frontend_ctx->salamander_init)
|
||||
frontend_ctx->salamander_init();
|
||||
|
@ -407,7 +407,8 @@ static bool android_run_events (void *data)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void frontend_android_get_environment_settings(int *argc, char *argv[], void *data)
|
||||
static void frontend_android_get_environment_settings(int *argc, char *argv[],
|
||||
void *data, void *params_data)
|
||||
{
|
||||
JNIEnv *env;
|
||||
jobject obj = NULL;
|
||||
|
@ -217,7 +217,8 @@ int gx_logger_file(struct _reent *r, int fd, const char *ptr, size_t len)
|
||||
extern char gx_rom_path[PATH_MAX];
|
||||
#endif
|
||||
|
||||
static void frontend_gx_get_environment_settings(int *argc, char *argv[], void *args)
|
||||
static void frontend_gx_get_environment_settings(int *argc, char *argv[],
|
||||
void *args, void *params_data)
|
||||
{
|
||||
#ifndef IS_SALAMANDER
|
||||
#if defined(HAVE_LOGGER)
|
||||
|
@ -167,7 +167,8 @@ static void callback_sysutil_exit(uint64_t status, uint64_t param, void *userdat
|
||||
}
|
||||
#endif
|
||||
|
||||
static void frontend_ps3_get_environment_settings(int *argc, char *argv[], void *args)
|
||||
static void frontend_ps3_get_environment_settings(int *argc, char *argv[],
|
||||
void *args, void *params_data)
|
||||
{
|
||||
#ifndef IS_SALAMANDER
|
||||
bool original_verbose = g_extern.verbose;
|
||||
|
@ -44,7 +44,8 @@ static int exit_callback(int arg1, int arg2, void *common)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void frontend_psp_get_environment_settings(int *argc, char *argv[], void *args)
|
||||
static void frontend_psp_get_environment_settings(int *argc, char *argv[],
|
||||
void *args, void *params_data)
|
||||
{
|
||||
(void)args;
|
||||
#ifndef IS_SALAMANDER
|
||||
|
@ -23,7 +23,8 @@
|
||||
#include "../../dynamic.h"
|
||||
#include "../../libretro_private.h"
|
||||
|
||||
static void frontend_qnx_get_environment_settings(int *argc, char *argv[], void *args)
|
||||
static void frontend_qnx_get_environment_settings(int *argc, char *argv[],
|
||||
void *args, void *params_data)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
@ -192,7 +192,8 @@ static HRESULT xbox_io_unmount(char *szDrive)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void frontend_xdk_get_environment_settings(int *argc, char *argv[], void *args)
|
||||
static void frontend_xdk_get_environment_settings(int *argc, char *argv[],
|
||||
void *args, void *params_data)
|
||||
{
|
||||
HRESULT ret;
|
||||
(void)ret;
|
||||
|
Loading…
x
Reference in New Issue
Block a user