diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/client.cpp | 12 | ||||
-rw-r--r-- | src/configuration.cpp | 8 | ||||
-rw-r--r-- | src/utils/paths.cpp | 48 | ||||
-rw-r--r-- | src/utils/paths.h | 30 |
6 files changed, 94 insertions, 8 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 37baf838f..4a808505d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -436,6 +436,8 @@ SET(SRCS utils/dtor.h utils/gettext.h utils/mathutils.h + utils/paths.cpp + utils/paths.h utils/sha256.cpp utils/sha256.h utils/stringutils.cpp diff --git a/src/Makefile.am b/src/Makefile.am index e158627c8..35188caa2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -443,6 +443,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ utils/mathutils.h \ utils/mkdir.cpp \ utils/mkdir.h \ + utils/paths.cpp \ + utils/paths.h \ utils/sha256.cpp \ utils/sha256.h \ utils/specialfolder.cpp \ diff --git a/src/client.cpp b/src/client.cpp index be3d20373..ac6970503 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -91,6 +91,7 @@ #include "utils/gettext.h" #include "utils/mkdir.h" +#include "utils/paths.h" #include "utils/stringutils.h" #ifdef __APPLE__ @@ -363,8 +364,15 @@ Client::Client(const Options &options): if (mOptions.dataPath.empty() && !branding.getStringValue("dataPath").empty()) { - mOptions.dataPath = branding.getDirectory() + "/" - + branding.getStringValue("dataPath"); + if (isRealPath(branding.getStringValue("dataPath"))) + { + mOptions.dataPath = branding.getStringValue("dataPath"); + } + else + { + mOptions.dataPath = branding.getDirectory() + "/" + + branding.getStringValue("dataPath"); + } mOptions.skipUpdate = true; } diff --git a/src/configuration.cpp b/src/configuration.cpp index 7969c9341..2d569314a 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -25,15 +25,13 @@ #include "configlistener.h" #include "log.h" +#include "utils/paths.h" #include "utils/stringutils.h" #include "utils/xml.h" #include <libxml/encoding.h> #include <stdlib.h> -#ifdef WIN32 -#define realpath(N,R) _fullpath((R),(N),_MAX_PATH) -#endif #include "debug.h" @@ -400,9 +398,7 @@ void Configuration::init(const std::string &filename, bool useResManager) else { mConfigPath = filename; - char *realPath = realpath(getFileDir(filename).c_str(), NULL); - mDirectory = realPath; - free(realPath); + mDirectory = getRealPath(getFileDir(filename)); } if (!doc.rootNode()) diff --git a/src/utils/paths.cpp b/src/utils/paths.cpp new file mode 100644 index 000000000..cae2d1837 --- /dev/null +++ b/src/utils/paths.cpp @@ -0,0 +1,48 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "utils/paths.h" + +#include <string.h> +#include <cstdarg> +#include <cstdio> + +#include <stdlib.h> + +#ifdef WIN32 +#define realpath(N,R) _fullpath((R),(N),_MAX_PATH) +#endif + +#include "debug.h" + +std::string getRealPath(const std::string &str) +{ + std::string path; + char *realPath = realpath(str.c_str(), NULL); + path = realPath; + free(realPath); + return path; +} + +bool isRealPath(const std::string &str) +{ + std::string path = getRealPath(str); + return str == path; +} diff --git a/src/utils/paths.h b/src/utils/paths.h new file mode 100644 index 000000000..1723bf6c4 --- /dev/null +++ b/src/utils/paths.h @@ -0,0 +1,30 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef UTILS_PATHS_H +#define UTILS_PATHS_H + +#include <string> + +std::string getRealPath(const std::string &str); + +bool isRealPath(const std::string &str); + +#endif // UTILS_PATHS_H |