forked from mirror/openmw-tes3mp
Implement 'setenv' for windows
Paths converter Move 'split' from main to Utils
This commit is contained in:
parent
72026955f5
commit
bdfaea2d46
4 changed files with 68 additions and 32 deletions
|
@ -80,7 +80,7 @@ void Script::LoadScripts(char *scripts, const char *base)
|
||||||
while (token)
|
while (token)
|
||||||
{
|
{
|
||||||
char path[4096];
|
char path[4096];
|
||||||
snprintf(path, sizeof(path), "%s/%s/%s", base, "scripts", token);
|
snprintf(path, sizeof(path), Utils::convertPath("%s/%s/%s").c_str(), base, "scripts", token);
|
||||||
Script::scripts.emplace_back(new Script(path));
|
Script::scripts.emplace_back(new Script(path));
|
||||||
token = strtok(nullptr, ",");
|
token = strtok(nullptr, ",");
|
||||||
}
|
}
|
||||||
|
@ -104,6 +104,6 @@ void Script::UnloadScripts()
|
||||||
void Script::LoadScript(const char *script, const char *base)
|
void Script::LoadScript(const char *script, const char *base)
|
||||||
{
|
{
|
||||||
char path[4096];
|
char path[4096];
|
||||||
snprintf(path, sizeof(path), "%s/%s/%s", base, "scripts", script);
|
snprintf(path, sizeof(path), Utils::convertPath("%s/%s/%s").c_str(), base, "scripts", script);
|
||||||
Script::scripts.emplace_back(new Script(path));
|
Script::scripts.emplace_back(new Script(path));
|
||||||
}
|
}
|
|
@ -10,6 +10,59 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
int setenv(const char *name, const char *value, int overwrite)
|
||||||
|
{
|
||||||
|
std::unique_ptr<char> tmp(new char[strlen(name) + strlen(value) + 1]);
|
||||||
|
sprintf(tmp.get(), "%s=%s", name, value);
|
||||||
|
|
||||||
|
printf("%s\n",tmp.get());
|
||||||
|
|
||||||
|
return putenv((const char*)tmp.get());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
std::string Utils::convertPath(std::string str)
|
||||||
|
{
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define _SEP_ '\\'
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
#define _SEP_ ':'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(__APPLE__)
|
||||||
|
for(auto &ch : str)
|
||||||
|
if(ch == '/')
|
||||||
|
ch = _SEP_;
|
||||||
|
#endif //defined(_WIN32) || defined(__APPLE__)
|
||||||
|
return str;
|
||||||
|
|
||||||
|
#undef _SEP_
|
||||||
|
}
|
||||||
|
|
||||||
|
const vector<string> Utils::split(const string &str, int delimiter)
|
||||||
|
{
|
||||||
|
string buffer;
|
||||||
|
vector<string> result;
|
||||||
|
|
||||||
|
for (auto symb:str)
|
||||||
|
if (symb != delimiter)
|
||||||
|
buffer += symb;
|
||||||
|
else if (!buffer.empty())
|
||||||
|
{
|
||||||
|
result.push_back(move(buffer));
|
||||||
|
buffer.clear();
|
||||||
|
}
|
||||||
|
if (!buffer.empty())
|
||||||
|
result.push_back(move(buffer));
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#undef _SEP_
|
||||||
void Utils::timestamp()
|
void Utils::timestamp()
|
||||||
{
|
{
|
||||||
time_t ltime;
|
time_t ltime;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#if (!defined(DEBUG_PRINTF) && defined(DEBUG))
|
#if (!defined(DEBUG_PRINTF) && defined(DEBUG))
|
||||||
#define DEBUG_PRINTF printf
|
#define DEBUG_PRINTF printf
|
||||||
|
@ -15,8 +15,16 @@
|
||||||
#define DEBUG_PRINTF(...)
|
#define DEBUG_PRINTF(...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
int setenv(const char *name, const char *value, int overwrite);
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Utils
|
namespace Utils
|
||||||
{
|
{
|
||||||
|
|
||||||
|
const std::vector<std::string> split(const std::string &str, int delimiter);
|
||||||
|
|
||||||
|
std::string convertPath(std::string str);
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
constexpr unsigned int hash(const char(&str)[N], size_t I = N)
|
constexpr unsigned int hash(const char(&str)[N], size_t I = N)
|
||||||
{
|
{
|
||||||
|
|
|
@ -63,44 +63,19 @@ std::string loadSettings (Settings::Manager & settings)
|
||||||
return settingspath;
|
return settingspath;
|
||||||
}
|
}
|
||||||
|
|
||||||
const vector<string> split(const string &str, int delimiter)
|
|
||||||
{
|
|
||||||
string buffer;
|
|
||||||
vector<string> result;
|
|
||||||
|
|
||||||
for (auto symb:str)
|
|
||||||
if (symb != delimiter)
|
|
||||||
buffer += symb;
|
|
||||||
else if (!buffer.empty())
|
|
||||||
{
|
|
||||||
result.push_back(move(buffer));
|
|
||||||
buffer.clear();
|
|
||||||
}
|
|
||||||
if (!buffer.empty())
|
|
||||||
result.push_back(move(buffer));
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
Settings::Manager mgr;
|
Settings::Manager mgr;
|
||||||
|
|
||||||
loadSettings(mgr);
|
loadSettings(mgr);
|
||||||
|
|
||||||
//string plugin_home = "/home/koncord/ClionProjects/tes3mp-server/files";
|
|
||||||
|
|
||||||
int players = mgr.getInt("players", "General");
|
int players = mgr.getInt("players", "General");
|
||||||
int port = mgr.getInt("port", "General");
|
int port = mgr.getInt("port", "General");
|
||||||
|
|
||||||
std::string plugin_home = mgr.getString("home", "Plugins");
|
string plugin_home = mgr.getString("home", "Plugins");
|
||||||
string moddir = plugin_home + "/files";
|
string moddir = Utils::convertPath(plugin_home + "/files");
|
||||||
|
|
||||||
vector<string> plugins (split(mgr.getString("plugins", "Plugins"), ','));
|
vector<string> plugins (Utils::split(mgr.getString("plugins", "Plugins"), ','));
|
||||||
|
|
||||||
cout << plugins[0] << endl;
|
|
||||||
|
|
||||||
printVersion("0.0.1b", 1);
|
printVersion("0.0.1b", 1);
|
||||||
|
|
||||||
|
@ -108,7 +83,7 @@ int main(int argc, char *argv[])
|
||||||
setenv("AMXFILE", moddir.c_str(), 1);
|
setenv("AMXFILE", moddir.c_str(), 1);
|
||||||
setenv("MOD_DIR", moddir.c_str(), 1); // hack for lua
|
setenv("MOD_DIR", moddir.c_str(), 1); // hack for lua
|
||||||
|
|
||||||
setenv("LUA_PATH", (plugin_home + "/scripts/?.lua" + ";" + plugin_home + "/scripts/?.t").c_str(), 1);
|
setenv("LUA_PATH", Utils::convertPath(plugin_home + "/scripts/?.lua" + ";" + plugin_home + "/scripts/?.t").c_str(), 1);
|
||||||
|
|
||||||
for(auto plugin : plugins)
|
for(auto plugin : plugins)
|
||||||
Script::LoadScript(plugin.c_str(), plugin_home.c_str());
|
Script::LoadScript(plugin.c_str(), plugin_home.c_str());
|
||||||
|
|
Loading…
Reference in a new issue