Skip to content

Commit 467cd45

Browse files
authoredFeb 13, 2025··
Update environment callback logic
1 parent f9f9ed8 commit 467cd45

File tree

6 files changed

+38
-16
lines changed

6 files changed

+38
-16
lines changed
 

‎src/ChaiLove.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
ChaiLove* ChaiLove::m_instance = NULL;
77
retro_input_state_t ChaiLove::input_state_cb = NULL;
88
retro_input_poll_t ChaiLove::input_poll_cb = NULL;
9-
retro_environment_t ChaiLove::environ_cb = NULL;
109

1110
void ChaiLove::destroy() {
1211
pntr_app_log(PNTR_APP_LOG_INFO, "[ChaiLove] Attempting to destroy ChaiLove");

‎src/ChaiLove.h

-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ class ChaiLove {
8181

8282
static retro_input_state_t input_state_cb;
8383
static retro_input_poll_t input_poll_cb;
84-
static retro_environment_t environ_cb;
8584

8685
love::config config;
8786
love::keyboard keyboard;

‎src/love/filesystem.cpp

+9-4
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,23 @@ void filesystem::mountlibretro() {
7272
const char *save_dir = NULL;
7373
const char *core_dir = NULL;
7474

75-
if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_LIBRETRO_PATH, &core_dir) && core_dir) {
75+
retro_environment_t environ_cb = pntr_app_libretro_environ_cb(NULL);
76+
if (environ_cb == NULL) {
77+
pntr_app_log(PNTR_APP_LOG_ERROR, "[ChaiLove] No environment callback for filesystem");
78+
}
79+
80+
if (environ_cb(RETRO_ENVIRONMENT_GET_LIBRETRO_PATH, &core_dir) && core_dir) {
7681
// Make sure to get the directory of the core.
7782
std::string parentPath(getParentDirectory(core_dir));
7883
mount(parentPath, "/libretro/core", false);
7984
}
80-
if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir) {
85+
if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir) {
8186
mount(system_dir, "/libretro/system", false);
8287
}
83-
if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_CORE_ASSETS_DIRECTORY, &assets_dir) && assets_dir) {
88+
if (environ_cb(RETRO_ENVIRONMENT_GET_CORE_ASSETS_DIRECTORY, &assets_dir) && assets_dir) {
8489
mount(assets_dir, "/libretro/assets", false);
8590
}
86-
if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &save_dir) && save_dir) {
91+
if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &save_dir) && save_dir) {
8792
save_dir = *save_dir ? save_dir : system_dir;
8893
mount(save_dir, "/libretro/saves", false);
8994
} else if (system_dir) {

‎src/love/system.cpp

+13-3
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,15 @@ std::string system::getVersionString() {
6767
void system::updateVariables(config& t) {
6868
// Update core option from the libretro variables.
6969
struct retro_variable var = {0};
70+
retro_environment_t environ_cb = pntr_app_libretro_environ_cb(NULL);
71+
if (environ_cb == NULL) {
72+
pntr_app_log(PNTR_APP_LOG_ERROR, "[ChaiLove] No environment callback for filesystem");
73+
}
7074

7175
// Alpha Blending
7276
var.key = "chailove_alphablending";
7377
var.value = NULL;
74-
if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
78+
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
7579
std::string varvalue(var.value);
7680
if (varvalue == "disabled") {
7781
t.options["alphablending"] = false;
@@ -81,7 +85,7 @@ void system::updateVariables(config& t) {
8185
// High Quality
8286
var.key = "chailove_highquality";
8387
var.value = NULL;
84-
if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
88+
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
8589
std::string varvalue(var.value);
8690
if (varvalue == "disabled") {
8791
t.options["highquality"] = false;
@@ -101,7 +105,13 @@ std::string system::getUsername() {
101105
if (!m_usernameInitialized) {
102106
m_usernameInitialized = true;
103107
const char *username = NULL;
104-
if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_USERNAME, &username) && username) {
108+
retro_environment_t environ_cb = pntr_app_libretro_environ_cb(NULL);
109+
if (environ_cb == NULL) {
110+
pntr_app_log(PNTR_APP_LOG_ERROR, "[ChaiLove] Environment callback not set for getUsername");
111+
return m_username;
112+
}
113+
114+
if (environ_cb(RETRO_ENVIRONMENT_GET_USERNAME, &username) && username) {
105115
m_username = std::string(username);
106116
}
107117
}

‎src/love/window.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,12 @@ window& window::showMessageBox(const std::string& msg, int frames) {
4343
retro_message retroMessage;
4444
retroMessage.msg = msg.c_str();
4545
retroMessage.frames = frames;
46-
ChaiLove::environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &retroMessage);
46+
retro_environment_t environ_cb = pntr_app_libretro_environ_cb(NULL);
47+
if (environ_cb == NULL) {
48+
pntr_app_log(PNTR_APP_LOG_ERROR, "[ChaiLove] Environment callback not set for showMessageBox");
49+
return *this;
50+
}
51+
environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &retroMessage);
4752
return *this;
4853
}
4954

‎src/main.cpp

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <string.h>
22
#include <stddef.h>
3+
#include "libretro.h"
34
#define PROJECT_VERSION "2.0.0"
45

56
void libretro_chailove_pntr_set_error(int error);
@@ -45,16 +46,19 @@ void libretro_chailove_pntr_set_error(int error) {
4546
}
4647

4748
bool Init(pntr_app* app) {
48-
ChaiLove::environ_cb = pntr_app_libretro_environ_cb(app);
49-
if (ChaiLove::environ_cb == NULL) {
50-
pntr_app_log(PNTR_APP_LOG_ERROR, "[ChaiLove] Environment callback not set");
49+
retro_environment_t environ_cb = pntr_app_libretro_environ_cb(app);
50+
if (environ_cb == NULL) {
51+
pntr_app_log(PNTR_APP_LOG_ERROR, "[ChaiLove] Environment callback not set for Init");
5152
return false;
5253
}
5354

5455
// Initialize PhysFS
55-
if (PHYSFS_init((const char*)ChaiLove::environ_cb) == 0) {
56-
pntr_app_log_ex(PNTR_APP_LOG_ERROR, "PHYSFS_init() failed: %s", PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode()));
57-
return false;
56+
if (PHYSFS_init((const char*)environ_cb) == 0) {
57+
PHYSFS_ErrorCode code = PHYSFS_getLastErrorCode();
58+
if (code != PHYSFS_ERR_IS_INITIALIZED) {
59+
pntr_app_log_ex(PNTR_APP_LOG_ERROR, "PHYSFS_init() failed: %s", PHYSFS_getErrorByCode(code));
60+
return false;
61+
}
5862
}
5963

6064
// Set up the chailove instance.

0 commit comments

Comments
 (0)