Replace the file handling code from secondary_core.c with the file streams

Hide secondary instance menu item if dynamic libraries are not supported
Remove unlink_utf8 stuff
Fix a compiler warning
This commit is contained in:
Dwedit 2018-03-29 09:37:35 -05:00
parent c5ec1885f2
commit 77f2b7d326
6 changed files with 11 additions and 146 deletions

View File

@ -56,9 +56,6 @@ COMPATIBILITY
#include "../libretro-common/compat/compat_fnmatch.c"
#include "../libretro-common/compat/fopen_utf8.c"
#if defined(HAVE_DYNAMIC) && HAVE_DYNAMIC
#include "../libretro-common/compat/unlink_utf8.c"
#endif
#include "../libretro-common/memmap/memalign.c"
/*============================================================

View File

@ -1,30 +0,0 @@
#include <compat/unlink_utf8.h>
#include <encodings/utf.h>
#include <boolean.h>
#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX)
#ifndef LEGACY_WIN32
#define LEGACY_WIN32
#endif
#endif
#ifdef _WIN32
#define NOMINMAX
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <malloc.h>
bool unlink_utf8(const char * filename)
{
#if defined(LEGACY_WIN32)
bool result = DeleteFileA(filename);
#else
wchar_t * filename_w = utf8_to_utf16_string_alloc(filename);
bool result = DeleteFileW(filename_w);
free(filename_w);
#endif
return result;
}
#endif

View File

@ -1,23 +0,0 @@
#ifndef __UNLINK_UTF8_H
#define __UNLINK_UTF8_H
#include <boolean.h>
#ifdef _WIN32
#if __cplusplus
extern "C"
{
#endif
bool unlink_utf8(const char * filename);
#if __cplusplus
}
#endif
#else
#include <unistd.h>
#define unlink_utf8 unlink
#endif
#endif

View File

@ -4966,9 +4966,11 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RUN_AHEAD_FRAMES,
PARSE_ONLY_UINT, false);
#if defined(HAVE_DYNAMIC) && HAVE_DYNAMIC
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RUN_AHEAD_SECONDARY_INSTANCE,
PARSE_ONLY_BOOL, false);
#endif
if (settings->bools.menu_show_advanced_settings)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_THROTTLE_FRAMERATE,

View File

@ -92,7 +92,7 @@ static void runahead_save_state_list_rotate(void)
firstElement = runahead_save_state_list->data[0];
for (i = 1; i < runahead_save_state_list->size; i++)
{
runahead_save_state_list->data[i - 1] = runahead_save_state_list->data[i - 1];
runahead_save_state_list->data[i - 1] = runahead_save_state_list->data[i];
}
runahead_save_state_list->data[runahead_save_state_list->size - 1] = firstElement;
}

View File

@ -11,10 +11,9 @@
#include <boolean.h>
#include <encodings/utf.h>
#include <compat/fopen_utf8.h>
#include <compat/unlink_utf8.h>
#include <dynamic/dylib.h>
#include <file/file_path.h>
#include <streams/file_stream.h>
#include "mem_util.h"
@ -41,12 +40,8 @@ static char* get_temp_directory_alloc(void);
static char* copy_core_to_temp_file(void);
static void* read_file_data_alloc(const char *fileName, int *size);
static bool write_file_data(const char *fileName, const void *data, int dataSize);
static bool write_file_with_random_name(char **tempDllPath,
const char *retroarchTempPath, const void* data, int dataSize);
const char *retroarchTempPath, const void* data, ssize_t dataSize);
static void* InputListElementConstructor(void);
@ -66,8 +61,6 @@ void remember_controller_port_device(long port, long device);
void clear_controller_port_map(void);
static void free_file(FILE **file_p);
char* get_temp_directory_alloc(void)
{
#ifdef _WIN32
@ -102,7 +95,7 @@ char* copy_core_to_temp_file(void)
char *retroarchTempPath = NULL;
char *tempDllPath = NULL;
void *dllFileData = NULL;
int dllFileSize = 0;
ssize_t dllFileSize = 0;
const char *corePath = path_get(RARCH_PATH_CORE);
const char *coreBaseName = path_basename(corePath);
@ -123,14 +116,12 @@ char* copy_core_to_temp_file(void)
if (!okay)
goto failed;
dllFileData = read_file_data_alloc(corePath, &dllFileSize);
if (!dllFileData)
if (!file_stream_read_file(corePath, &dllFileData, &dllFileSize))
goto failed;
strcat_alloc(&tempDllPath, retroarchTempPath);
strcat_alloc(&tempDllPath, coreBaseName);
okay = write_file_data(tempDllPath, dllFileData, dllFileSize);
okay = file_stream_write_file(tempDllPath, dllFileData, dllFileSize);
if (!okay)
{
@ -153,80 +144,8 @@ failed:
return NULL;
}
void* read_file_data_alloc(const char *fileName, int *size)
{
void *data = NULL;
int fileSize = 0;
size_t bytesRead = 0;
#ifdef _WIN32
int64_t fileSizeLong = 0;
#else
off64_t fileSizeLong = 0;
#endif
FILE *f = (FILE*)fopen_utf8(fileName, "rb");
if (!f)
goto failed;
fseek(f, 0, SEEK_END);
#ifdef _WIN32
fileSizeLong = _ftelli64(f);
#else
fileSizeLong = ftello64(f);
#endif
fseek(f, 0, SEEK_SET);
/* 256MB file size limit for DLL files */
if (fileSizeLong < 0 || fileSizeLong > 256 * 1024 * 1024)
goto failed;
fileSize = (int)fileSizeLong;
data = malloc(fileSize);
if (!data)
goto failed;
bytesRead = fread(data, 1, fileSize, f);
if ((int)bytesRead != (int)fileSize)
goto failed;
success:
free_file(&f);
if (size)
*size = fileSize;
return data;
failed:
free_ptr(&data);
free_file(&f);
if (size)
*size = 0;
return NULL;
}
bool write_file_data(const char *fileName, const void *data, int dataSize)
{
bool okay = false;
size_t bytesWritten = 0;
FILE *f = (FILE*)fopen_utf8(fileName, "wb");
if (!f)
goto failed;
bytesWritten = fwrite(data, 1, dataSize, f);
if (bytesWritten != dataSize)
goto failed;
success:
free_file(&f);
return true;
failed:
free_file(&f);
return false;
}
bool write_file_with_random_name(char **tempDllPath,
const char *retroarchTempPath, const void* data, int dataSize)
const char *retroarchTempPath, const void* data, ssize_t dataSize)
{
int i;
char numberBuf[32];
@ -258,7 +177,7 @@ bool write_file_with_random_name(char **tempDllPath,
strcat_alloc(tempDllPath, prefix);
strcat_alloc(tempDllPath, numberBuf);
strcat_alloc(tempDllPath, ext);
okay = write_file_data(*tempDllPath, data, dataSize);
okay = write_file_stream(*tempDllPath, data, dataSize);
if (okay)
break;
}
@ -408,7 +327,7 @@ void secondary_core_destroy(void)
dylib_close(secondary_module);
secondary_module = NULL;
unlink_utf8(secondary_library_path);
filestream_delete(secondary_library_path);
free_str(&secondary_library_path);
}
}