Make core need_fullpath = false and pass memory buffer and size
of ROM from frontend to core
This commit is contained in:
@@ -115,8 +115,12 @@ void FCEUI_DisableSpriteLimitation(int a);
|
||||
/* -1 = no change, 0 = show, 1 = hide, 2 = internal toggle */
|
||||
void FCEUI_SetRenderDisable(int sprites, int bg);
|
||||
|
||||
#ifdef __LIBRETRO__
|
||||
FCEUGI *FCEUI_LoadGame(const char *name, uint8_t *buf, size_t bufsize);
|
||||
#else
|
||||
/* name=path and file to load. returns 0 on failure, 1 on success */
|
||||
FCEUGI *FCEUI_LoadGame(const char *name);
|
||||
#endif
|
||||
|
||||
#ifdef COPYFAMI
|
||||
/* Fake UNIF board to start new CFHI instance */
|
||||
|
||||
@@ -227,7 +227,7 @@ int iNESLoad(const char *name, FCEUFILE *fp);
|
||||
int FDSLoad(const char *name, FCEUFILE *fp);
|
||||
int NSFLoad(FCEUFILE *fp);
|
||||
|
||||
FCEUGI *FCEUI_LoadGame(const char *name)
|
||||
FCEUGI *FCEUI_LoadGame(const char *name, uint8_t *databuf, size_t databufsize)
|
||||
{
|
||||
FCEUFILE *fp;
|
||||
|
||||
@@ -249,7 +249,7 @@ FCEUGI *FCEUI_LoadGame(const char *name)
|
||||
|
||||
GetFileBase(name);
|
||||
|
||||
fp = FCEU_fopen(name, NULL, "rb", 0);
|
||||
fp = FCEU_fopen(name, NULL, "rb", 0, databuf, databufsize);
|
||||
|
||||
if (!fp) {
|
||||
FCEU_PrintError("Error opening \"%s\"!", name);
|
||||
|
||||
@@ -669,7 +669,7 @@ int FDSLoad(const char *name, FCEUFILE *fp) {
|
||||
memcpy(diskdatao[x], diskdata[x], 65500);
|
||||
}
|
||||
|
||||
if ((tp = FCEU_fopen(fn, 0, "rb", 0))) {
|
||||
if ((tp = FCEU_fopen(fn, 0, "rb", 0, NULL, 0))) {
|
||||
FCEU_printf("Disk was written. Auxillary FDS file open \"%s\".\n", fn);
|
||||
FreeFDSMemory();
|
||||
if (!SubLoad(tp)) {
|
||||
|
||||
@@ -63,7 +63,22 @@ doret:
|
||||
return tmp;
|
||||
}
|
||||
|
||||
FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext)
|
||||
static MEMWRAP *MakeMemWrapBuffer(void *tz, int type, uint8 *buffer, size_t bufsize)
|
||||
{
|
||||
MEMWRAP *tmp = (MEMWRAP*)FCEU_malloc(sizeof(MEMWRAP));
|
||||
|
||||
if (!tmp)
|
||||
return NULL;
|
||||
|
||||
tmp->location = 0;
|
||||
tmp->size = bufsize;
|
||||
tmp->data = buffer;
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn,
|
||||
char *mode, char *ext, uint8 *buffer, size_t bufsize)
|
||||
{
|
||||
FCEUFILE *fceufp = (FCEUFILE*)malloc(sizeof(FCEUFILE));
|
||||
void *t = fopen(path, mode);
|
||||
@@ -76,7 +91,10 @@ FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext
|
||||
|
||||
fseek((FILE*)t, 0, SEEK_SET);
|
||||
fceufp->type = 0;
|
||||
fceufp->fp = MakeMemWrap(t, 0);
|
||||
if (buffer)
|
||||
fceufp->fp = MakeMemWrapBuffer(t, 0, buffer, bufsize);
|
||||
else
|
||||
fceufp->fp = MakeMemWrap(t, 0);
|
||||
return fceufp;
|
||||
}
|
||||
|
||||
|
||||
@@ -475,7 +475,7 @@ void retro_set_environment(retro_environment_t cb)
|
||||
|
||||
void retro_get_system_info(struct retro_system_info *info)
|
||||
{
|
||||
info->need_fullpath = true;
|
||||
info->need_fullpath = false;
|
||||
info->valid_extensions = "fds|nes|unif";
|
||||
info->library_version = "(SVN)";
|
||||
info->library_name = "FCEUmm";
|
||||
@@ -561,7 +561,7 @@ static bool fceu_init(const struct retro_game_info *game)
|
||||
FCEUI_SetSoundVolume(256);
|
||||
FCEUI_Sound(32050);
|
||||
|
||||
GameInfo = (FCEUGI*)FCEUI_LoadGame(game->path);
|
||||
GameInfo = (FCEUGI*)FCEUI_LoadGame(game->path, (uint8_t*)game->data, game->size);
|
||||
if (!GameInfo)
|
||||
return false;
|
||||
|
||||
|
||||
@@ -18,7 +18,11 @@ typedef struct {
|
||||
uint32 type; // 0=normal file, 1=gzip, 2=zip
|
||||
} FCEUFILE;
|
||||
|
||||
#ifdef __LIBRETRO__
|
||||
FCEUFILE *FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext, uint8 *buffer, size_t bufsize);
|
||||
#else
|
||||
FCEUFILE *FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext);
|
||||
#endif
|
||||
int FCEU_fclose(FCEUFILE*);
|
||||
uint64 FCEU_fread(void *ptr, size_t size, size_t nmemb, FCEUFILE*);
|
||||
uint64 FCEU_fwrite(void *ptr, size_t size, size_t nmemb, FCEUFILE*);
|
||||
|
||||
Reference in New Issue
Block a user