diff options
Diffstat (limited to 'Swiften/Base/Paths.cpp')
| -rw-r--r-- | Swiften/Base/Paths.cpp | 47 | 
1 files changed, 47 insertions, 0 deletions
| diff --git a/Swiften/Base/Paths.cpp b/Swiften/Base/Paths.cpp new file mode 100644 index 0000000..c1dbef2 --- /dev/null +++ b/Swiften/Base/Paths.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Base/Paths.h> +#include <Swiften/Base/Platform.h> + +#if defined(SWIFTEN_PLATFORM_MACOSX) +#include <mach-o/dyld.h> +#elif defined(SWIFTEN_PLATFORM_LINUX) +#include <unistd.h> +#elif defined(SWIFTEN_PLATFORM_WINDOWS) +#include <windows.h> +#endif + +#include <Swiften/Base/ByteArray.h> + +namespace Swift { + +boost::filesystem::path Paths::getExecutablePath() { +#if defined(SWIFTEN_PLATFORM_MACOSX) +	ByteArray path; +	uint32_t size = 4096; +	path.resize(size); +	if (_NSGetExecutablePath(path.getData(), &size) == 0) { +		return boost::filesystem::path(path.toString().getUTF8Data()).parent_path(); +	} +#elif defined(SWIFTEN_PLATFORM_LINUX) +	ByteArray path; +	path.resize(4096); +	size_t size = readlink("/proc/self/exe", path.getData(), path.getSize()); +	if (size > 0) { +		path.resize(size); +		return boost::filesystem::path(path.toString().getUTF8Data()).parent_path(); +	} +#elif defined(SWIFTEN_PLATFORM_WINDOWS) +	ByteArray data; +	data.resize(2048); +	GetModuleFileName(NULL, data.getData(), data.getSize()); +	return boost::filesystem::path(data.toString().getUTF8Data()).parent_path(); +#endif +	return boost::filesystem::path(); +} + +} | 
 Swift
 Swift