From 3ffb1a8cbdf3b986965b51c16c540f4e6d793010 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Wed, 15 Jan 2025 23:47:43 -0500
Subject: [PATCH] storage: generic title storage allows override paths without
'/' appended.
Fixes #11299.
---
src/storage/generic/SDL_genericstorage.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/storage/generic/SDL_genericstorage.c b/src/storage/generic/SDL_genericstorage.c
index 3d3e93025b1cc..b1270a761bab2 100644
--- a/src/storage/generic/SDL_genericstorage.c
+++ b/src/storage/generic/SDL_genericstorage.c
@@ -236,10 +236,15 @@ static const SDL_StorageInterface GENERIC_title_iface = {
static SDL_Storage *GENERIC_Title_Create(const char *override, SDL_PropertiesID props)
{
SDL_Storage *result = NULL;
-
char *basepath = NULL;
+
if (override != NULL) {
- basepath = SDL_strdup(override);
+ // make sure override has a path separator at the end. If you're not on Windows and used '\\', that's on you.
+ const size_t slen = SDL_strlen(override);
+ const bool need_sep = (!slen || ((override[slen-1] != '/') && (override[slen-1] != '\\')));
+ if (SDL_asprintf(&basepath, "%s%s", override, need_sep ? "/" : "") == -1) {
+ return NULL;
+ }
} else {
const char *base = SDL_GetBasePath();
basepath = base ? SDL_strdup(base) : NULL;