mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
Rewrite rarch_main_wrap - we need a way of getting a valid argc/argv
pair for consoles where we get stupid argc/argv pairs back that need to be 'converted' into something that RetroArch's PC-style args parsing can deal with
This commit is contained in:
parent
a5a85dbbd9
commit
ae1e3b3f07
@ -247,8 +247,10 @@ void load_menu_game_prepare_dummy(void)
|
||||
|
||||
bool load_menu_game(void)
|
||||
{
|
||||
int ret;
|
||||
int argc, ret, i;
|
||||
struct rarch_main_wrap args = {0};
|
||||
char *argv_copy[MAX_ARGS];
|
||||
char *argv[MAX_ARGS] = {NULL};
|
||||
|
||||
if (!driver.menu)
|
||||
return false;
|
||||
@ -265,7 +267,17 @@ bool load_menu_game(void)
|
||||
args.rom_path = *g_extern.fullpath ? g_extern.fullpath : NULL;
|
||||
args.libretro_path = *g_settings.libretro ? g_settings.libretro : NULL;
|
||||
|
||||
ret = rarch_main_init_wrap(&args);
|
||||
argc = 0;
|
||||
|
||||
rarch_main_init_wrap(&args, &argc, argv);
|
||||
|
||||
// The pointers themselves are not const, and can be messed around with by getopt_long().
|
||||
memcpy(argv_copy, argv, sizeof(argv));
|
||||
|
||||
ret = rarch_main_init(argc, argv);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(argv_copy); i++)
|
||||
free(argv_copy[i]);
|
||||
|
||||
if (ret != 0)
|
||||
{
|
||||
|
@ -739,7 +739,13 @@ void rarch_game_reset(void);
|
||||
void rarch_main_clear_state(void);
|
||||
void rarch_init_system_info(void);
|
||||
int rarch_main(int argc, char *argv[]);
|
||||
int rarch_main_init_wrap(const struct rarch_main_wrap *args);
|
||||
|
||||
#ifndef MAX_ARGS
|
||||
#define MAX_ARGS 32
|
||||
#endif
|
||||
|
||||
void rarch_main_init_wrap(const struct rarch_main_wrap *args, int *argc, char **argv);
|
||||
|
||||
int rarch_main_init(int argc, char *argv[]);
|
||||
bool rarch_main_idle_iterate(void);
|
||||
bool rarch_main_iterate(void);
|
||||
|
46
retroarch.c
46
retroarch.c
@ -3190,77 +3190,59 @@ void rarch_main_deinit(void)
|
||||
g_extern.main_is_init = false;
|
||||
}
|
||||
|
||||
#define MAX_ARGS 32
|
||||
|
||||
int rarch_main_init_wrap(const struct rarch_main_wrap *args)
|
||||
void rarch_main_init_wrap(const struct rarch_main_wrap *args, int *argc, char **argv)
|
||||
{
|
||||
unsigned i;
|
||||
if (g_extern.main_is_init)
|
||||
rarch_main_deinit();
|
||||
|
||||
int argc = 0;
|
||||
char *argv[MAX_ARGS] = {NULL};
|
||||
char *argv_copy[MAX_ARGS];
|
||||
|
||||
argv[argc++] = strdup("retroarch");
|
||||
argv[(*argc)++] = strdup("retroarch");
|
||||
|
||||
if (!args->no_rom)
|
||||
{
|
||||
if (args->rom_path)
|
||||
{
|
||||
RARCH_LOG("Using content: %s.\n", args->rom_path);
|
||||
argv[argc++] = strdup(args->rom_path);
|
||||
argv[(*argc)++] = strdup(args->rom_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
RARCH_LOG("No content, starting dummy core.\n");
|
||||
argv[argc++] = strdup("--menu");
|
||||
argv[(*argc)++] = strdup("--menu");
|
||||
}
|
||||
}
|
||||
|
||||
if (args->sram_path)
|
||||
{
|
||||
argv[argc++] = strdup("-s");
|
||||
argv[argc++] = strdup(args->sram_path);
|
||||
argv[(*argc)++] = strdup("-s");
|
||||
argv[(*argc)++] = strdup(args->sram_path);
|
||||
}
|
||||
|
||||
if (args->state_path)
|
||||
{
|
||||
argv[argc++] = strdup("-S");
|
||||
argv[argc++] = strdup(args->state_path);
|
||||
argv[(*argc)++] = strdup("-S");
|
||||
argv[(*argc)++] = strdup(args->state_path);
|
||||
}
|
||||
|
||||
if (args->config_path)
|
||||
{
|
||||
argv[argc++] = strdup("-c");
|
||||
argv[argc++] = strdup(args->config_path);
|
||||
argv[(*argc)++] = strdup("-c");
|
||||
argv[(*argc)++] = strdup(args->config_path);
|
||||
}
|
||||
|
||||
#ifdef HAVE_DYNAMIC
|
||||
if (args->libretro_path)
|
||||
{
|
||||
argv[argc++] = strdup("-L");
|
||||
argv[argc++] = strdup(args->libretro_path);
|
||||
argv[(*argc)++] = strdup("-L");
|
||||
argv[(*argc)++] = strdup(args->libretro_path);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (args->verbose)
|
||||
argv[argc++] = strdup("-v");
|
||||
argv[(*argc)++] = strdup("-v");
|
||||
|
||||
#ifdef HAVE_FILE_LOGGER
|
||||
for (i = 0; i < argc; i++)
|
||||
for (i = 0; i < *argc; i++)
|
||||
RARCH_LOG("arg #%d: %s\n", i, argv[i]);
|
||||
#endif
|
||||
|
||||
// The pointers themselves are not const, and can be messed around with by getopt_long().
|
||||
memcpy(argv_copy, argv, sizeof(argv));
|
||||
|
||||
int ret = rarch_main_init(argc, argv);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(argv_copy); i++)
|
||||
free(argv_copy[i]);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool rarch_main_idle_iterate(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user