From 6a10bc8d7d186fd83099c75c2a03409d0881aae9 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 16 Jun 2011 22:10:50 +0300 Subject: Fix dataDir in branding files. Move path functions to paths.cpp --- src/CMakeLists.txt | 2 ++ src/Makefile.am | 2 ++ src/client.cpp | 12 ++++++++++-- src/configuration.cpp | 8 ++------ src/utils/paths.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/utils/paths.h | 30 ++++++++++++++++++++++++++++++ 6 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 src/utils/paths.cpp create mode 100644 src/utils/paths.h (limited to 'src') 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 #include -#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 . + */ + +#include "utils/paths.h" + +#include +#include +#include + +#include + +#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 . + */ + +#ifndef UTILS_PATHS_H +#define UTILS_PATHS_H + +#include + +std::string getRealPath(const std::string &str); + +bool isRealPath(const std::string &str); + +#endif // UTILS_PATHS_H -- cgit v1.2.3-60-g2f50