mirror of https://github.com/OpenRCT2/OpenRCT2.git
Fix #4874: OpenRCT fails to launch if no .config folder exists...
Change platform_ensure_directory_exists to create the directory chain given, e.g. mkdir -p. Based on https://gist.github.com/JonathonReinhart/8c0d90191c38af2dcadb102c4e202950.
This commit is contained in:
parent
1935f79507
commit
018c0d5082
|
@ -174,14 +174,36 @@ static mode_t getumask()
|
|||
|
||||
bool platform_ensure_directory_exists(const utf8 *path)
|
||||
{
|
||||
mode_t mask = getumask();
|
||||
char buffer[MAX_PATH];
|
||||
platform_utf8_to_multibyte(path, buffer, MAX_PATH);
|
||||
mode_t mask = getumask();
|
||||
log_verbose("%s", buffer);
|
||||
const int result = mkdir(buffer, mask);
|
||||
if (result == 0 || (result == -1 && errno == EEXIST))
|
||||
return true;
|
||||
return false;
|
||||
|
||||
log_verbose("Create directory: %s", buffer);
|
||||
for (char *p = buffer + 1; *p != '\0'; p++) {
|
||||
if (*p == '/') {
|
||||
// Temporarily truncate
|
||||
*p = '\0';
|
||||
|
||||
log_verbose("mkdir(%s)", buffer);
|
||||
if (mkdir(buffer, mask) != 0) {
|
||||
if (errno != EEXIST) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Restore truncation
|
||||
*p = '/';
|
||||
}
|
||||
}
|
||||
|
||||
log_verbose("mkdir(%s)", buffer);
|
||||
if (mkdir(buffer, mask) != 0) {
|
||||
if (errno != EEXIST) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool platform_directory_delete(const utf8 *path)
|
||||
|
|
Loading…
Reference in New Issue