/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include #include #if defined(SWIFTEN_PLATFORM_MACOSX) #include #elif defined(SWIFTEN_PLATFORM_LINUX) #include #elif defined(SWIFTEN_PLATFORM_WINDOWS) #include #endif #include namespace Swift { boost::filesystem::path Paths::getExecutablePath() { #if defined(SWIFTEN_PLATFORM_MACOSX) ByteArray path; uint32_t size = 4096; path.resize(size); if (_NSGetExecutablePath(const_cast(reinterpret_cast(vecptr(path))), &size) == 0) { return boost::filesystem::path(std::string(reinterpret_cast(vecptr(path)), path.size()).c_str()).parent_path(); } #elif defined(SWIFTEN_PLATFORM_LINUX) ByteArray path; path.resize(4096); ssize_t size = readlink("/proc/self/exe", reinterpret_cast(vecptr(path)), path.size()); if (size > 0) { path.resize(size); return boost::filesystem::path(std::string(reinterpret_cast(vecptr(path)), path.size()).c_str()).parent_path(); } #elif defined(SWIFTEN_PLATFORM_WINDOWS) ByteArray data; data.resize(2048); GetModuleFileName(NULL, reinterpret_cast(vecptr(data)), data.size()); return boost::filesystem::path(std::string(reinterpret_cast(vecptr(data)), data.size()).c_str()).parent_path(); #endif return boost::filesystem::path(); } }