merge from libretro fork
[pcsx_rearmed.git] / frontend / main.c
index 3440e38..dcac1d9 100644 (file)
@@ -11,7 +11,7 @@
 #include <unistd.h>
 #include <signal.h>
 #include <time.h>
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(NO_DYLIB)
 #include <dlfcn.h>
 #endif
 
@@ -158,15 +158,17 @@ void emu_set_default_config(void)
        spu_config.iVolume = 768;
        spu_config.iTempo = 0;
        spu_config.iUseThread = 1; // no effect if only 1 core is detected
-#ifdef HAVE_PRE_ARMV7 /* XXX GPH hack */
+#if defined(HAVE_PRE_ARMV7) && !defined(_3DS) /* XXX GPH hack */
        spu_config.iUseReverb = 0;
        spu_config.iUseInterpolation = 0;
+#ifndef HAVE_LIBRETRO
        spu_config.iTempo = 1;
+#endif
 #endif
        new_dynarec_hacks = 0;
 
-       in_type1 = PSE_PAD_TYPE_STANDARD;
-       in_type2 = PSE_PAD_TYPE_STANDARD;
+       in_type[0] = PSE_PAD_TYPE_STANDARD;
+       in_type[1] = PSE_PAD_TYPE_STANDARD;
 }
 
 void do_emu_action(void)
@@ -313,7 +315,7 @@ static int cdidcmp(const char *id1, const char *id2)
 
 static void parse_cwcheat(void)
 {
-       char line[256], buf[64], name[64], *p;
+       char line[256], buf[256], name[256], *p;
        int newcheat = 1;
        u32 a, v;
        FILE *f;
@@ -755,10 +757,10 @@ void SysReset() {
        // reset can run code, timing must be set
        pl_timing_prepare(Config.PsxType);
 
-       EmuReset();
-
        // hmh core forgets this
        CDR_stop();
+   
+       EmuReset();
 
        GPU_updateLace = real_lace;
        g_emu_resetting = 0;
@@ -806,7 +808,7 @@ int emu_save_state(int slot)
                return ret;
 
        ret = SaveState(fname);
-#ifdef HAVE_PRE_ARMV7 /* XXX GPH hack */
+#if defined(HAVE_PRE_ARMV7) && !defined(_3DS) && !defined(__SWITCH__) /* XXX GPH hack */
        sync();
 #endif
        SysPrintf("* %s \"%s\" [%d]\n",
@@ -828,6 +830,7 @@ int emu_load_state(int slot)
        return LoadState(fname);
 }
 
+#ifndef HAVE_LIBRETRO
 #ifndef ANDROID
 
 void SysPrintf(const char *fmt, ...) {
@@ -852,6 +855,7 @@ void SysPrintf(const char *fmt, ...) {
 }
 
 #endif
+#endif /* HAVE_LIBRETRO */
 
 void SysMessage(const char *fmt, ...) {
        va_list list;
@@ -901,14 +905,15 @@ static int _OpenPlugins(void) {
 
        if (Config.UseNet && !NetOpened) {
                netInfo info;
-               char path[MAXPATHLEN];
+               char path[MAXPATHLEN * 2];
                char dotdir[MAXPATHLEN];
 
                MAKE_PATH(dotdir, "/.pcsx/plugins/", NULL);
 
                strcpy(info.EmuName, "PCSX");
-               strncpy(info.CdromID, CdromId, 9);
-               strncpy(info.CdromLabel, CdromLabel, 9);
+               memcpy(info.CdromID, CdromId, 9); /* no \0 trailing character? */
+               memcpy(info.CdromLabel, CdromLabel, 9);
+               info.CdromLabel[9] = '\0';
                info.psxMem = psxM;
                info.GPU_showScreenPic = GPU_showScreenPic;
                info.GPU_displayText = GPU_displayText;
@@ -1020,7 +1025,7 @@ void *SysLoadLibrary(const char *lib) {
                                return (void *)(uintptr_t)(PLUGIN_DL_BASE + builtin_plugin_ids[i]);
        }
 
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(NO_DYLIB)
        ret = dlopen(lib, RTLD_NOW);
        if (ret == NULL)
                SysMessage("dlopen: %s", dlerror());
@@ -1037,7 +1042,7 @@ void *SysLoadSym(void *lib, const char *sym) {
        if (PLUGIN_DL_BASE <= plugid && plugid < PLUGIN_DL_BASE + ARRAY_SIZE(builtin_plugins))
                return plugin_link(plugid - PLUGIN_DL_BASE, sym);
 
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(NO_DYLIB)
        return dlsym(lib, sym);
 #else
        return NULL;
@@ -1045,7 +1050,9 @@ void *SysLoadSym(void *lib, const char *sym) {
 }
 
 const char *SysLibError() {
-#ifndef _WIN32
+#if defined(NO_DYLIB)
+       return NULL;
+#elif !defined(_WIN32)
        return dlerror();
 #else
        return "not supported";
@@ -1058,8 +1065,7 @@ void SysCloseLibrary(void *lib) {
        if (PLUGIN_DL_BASE <= plugid && plugid < PLUGIN_DL_BASE + ARRAY_SIZE(builtin_plugins))
                return;
 
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(NO_DYLIB)
        dlclose(lib);
 #endif
 }
-