forked from Mirrorlandia_minetest/minetest
Map download: Escape ':' to '_' (#9235)
This is necessary under Windows systems, and direct IPv6 connections. Windows universally disallows ':' from occuring in filenames. Other disallowed characters on Windows: \ / * ? " < > | are not relevant to hostnames, IPv4 or IPv6 addresses. Anyone who has got an existing server map saved on Linux with ':' in the world save will want to keep that save.
This commit is contained in:
parent
4c8af5492b
commit
8d75c118d9
@ -782,11 +782,20 @@ void Client::initLocalMapSaving(const Address &address,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string world_path = porting::path_user
|
std::string world_path;
|
||||||
+ DIR_DELIM + "worlds"
|
#define set_world_path(hostname) \
|
||||||
+ DIR_DELIM + "server_"
|
world_path = porting::path_user \
|
||||||
|
+ DIR_DELIM + "worlds" \
|
||||||
|
+ DIR_DELIM + "server_" \
|
||||||
+ hostname + "_" + std::to_string(address.getPort());
|
+ hostname + "_" + std::to_string(address.getPort());
|
||||||
|
|
||||||
|
set_world_path(hostname);
|
||||||
|
if (!fs::IsDir(world_path)) {
|
||||||
|
std::string hostname_escaped = hostname;
|
||||||
|
str_replace(hostname_escaped, ':', '_');
|
||||||
|
set_world_path(hostname_escaped);
|
||||||
|
}
|
||||||
|
#undef set_world_path
|
||||||
fs::CreateAllDirs(world_path);
|
fs::CreateAllDirs(world_path);
|
||||||
|
|
||||||
m_localdb = new MapDatabaseSQLite3(world_path);
|
m_localdb = new MapDatabaseSQLite3(world_path);
|
||||||
|
Loading…
Reference in New Issue
Block a user