fix compile on osx and linux

added  GetPluginDirectory (please check on windows)


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2490 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
nakeee 2009-02-28 23:21:51 +00:00
parent 7d4e374c21
commit 324abc9a7f
6 changed files with 119 additions and 43 deletions

View File

@ -27,7 +27,8 @@
#ifndef _WIN32
#if defined __APPLE__
char* strndup (char const *s, size_t n);
char* strndup (char const *s, size_t n);
size_t strnlen(const char *s, size_t n);
#else
#include <byteswap.h>
#endif // APPLE

View File

@ -32,6 +32,13 @@
#include <stdlib.h>
#endif
#if defined(__APPLE__)
#include <CoreFoundation/CFString.h>
#include <CoreFoundation/CFUrl.h>
#include <CoreFoundation/CFBundle.h>
#include <sys/param.h>
#endif
#include <fstream>
#include <sys/stat.h>
@ -305,30 +312,6 @@ bool Copy(const char *srcFilename, const char *destFilename)
#endif
}
// Returns a pointer to a string with a Dolphin data dir in the user's home directory.
// To be used in "multi-user" mode (that is, installed).
const char *GetUserDirectory()
{
// Make sure we only need to do it once
static char path[MAX_PATH] = {0};
if (strlen(path) > 0)
return path;
#ifdef WIN32
char homedir[MAX_PATH];
if (!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, path)))
return NULL;
#else
char *homedir = getenv("HOME");
if (!homedir)
return NULL;
#endif
snprintf(path, sizeof(path), "%s" DIR_SEP DOLPHIN_DATA_DIR, homedir);
INFO_LOG(COMMON, "GetUserDirectory: Setting to %s:", path);
return path;
}
// Returns the size of filename (64bit)
u64 GetSize(const char *filename)
{
@ -520,5 +503,87 @@ bool SetCurrentDirectory(const char *_rDirectory)
return chdir(_rDirectory) == 0;
}
#if defined(__APPLE__)
std::string GetBundleDirectory()
{
// Plugin path will be Dolphin.app/Contents/PlugIns
CFURLRef BundleRef;
char AppBundlePath[MAXPATHLEN];
// Get the main bundle for the app
BundleRef = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFStringRef BundlePath = CFURLCopyFileSystemPath(BundleRef, kCFURLPOSIXPathStyle);
CFStringGetFileSystemRepresentation(BundlePath, AppBundlePath, sizeof(AppBundlePath));
CFRelease(BundleRef);
CFRelease(BundlePath);
return AppBundlePath;
}
#endif
// Returns the path to where the plugins are
std::string GetPluginsDirectory()
{
std::string pluginsDir;
#if defined (__APPLE__)
PluginsDir = GetBundleDirectory();
PluginsDir += DIR_SEP;
PluginsDir += PLUGINS_DIR;
#elsif __linux__
pluginsDir = PLUGINS_DIR;
// FIXME global install
#else
pluginsDir = PLUGINS_DIR;
#endif
INFO_LOG(COMMON, "GetPluginsDirectory: Setting to %s:", pluginsDir.c_str());
return pluginsDir;
}
// Returns the path to where the sys file are
std::string GetSysDirectory()
{
std::string sysDir;
#if defined (__APPLE__)
sysDir = GetBundleDirectory();
sysDir += DIR_SEP;
sysDir += SYSDATA_DIR;
#elsif __linux__
sysDir = SYSDATA_DIR;
// FIXME global install
#else
sysDir = SYSDATA_DIR;
#endif
INFO_LOG(COMMON, "GetSysDirectory: Setting to %s:", sysDir.c_str());
return sysDir;
}
// Returns a pointer to a string with a Dolphin data dir in the user's home
// directory. To be used in "multi-user" mode (that is, installed).
const char *GetUserDirectory()
{
// Make sure we only need to do it once
static char path[MAX_PATH] = {0};
if (strlen(path) > 0)
return path;
#ifdef WIN32
char homedir[MAX_PATH];
if (!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, path)))
return NULL;
#else
char *homedir = getenv("HOME");
if (!homedir)
return NULL;
#endif
snprintf(path, sizeof(path), "%s" DIR_SEP DOLPHIN_DATA_DIR, homedir);
INFO_LOG(COMMON, "GetUserDirectory: Setting to %s:", path);
return path;
}
} // namespace

View File

@ -84,9 +84,21 @@ const char *GetCurrentDirectory();
// Set the current directory to given directory
bool SetCurrentDirectory(const char *directory);
// Returns a pointer to a string with the dolphin data dir
// Returns a pointer to a string with a Dolphin data dir in the user's home
// directory. To be used in "multi-user" mode (that is, installed).
const char *GetUserDirectory();
// Returns the path to where the plugins are
std::string GetPluginsDirectory();
// Returns the path to where the sys file are
std::string GetSysDirectory();
#ifdef __APPLE__
std::string GetBundleDirectory();
#endif
} // namespace
#endif

View File

@ -37,14 +37,24 @@ const char *GetLastErrorMsg()
return errStr;
}
char *strndup (char const *s, size_t n)
#ifdef __APPLE__
// strlen with cropping after size n
size_t strnlen(const char *s, size_t n)
{
const char *p = (const char *)memchr(s, 0, n);
return(p ? p-s : n);
}
#endif
// strdup with cropping after size n
char* strndup(char const *s, size_t n)
{
size_t len = strnlen(s, n);
char *dup = (char *)malloc(len + 1);
if (dup == NULL)
return NULL;
dup[len] = '\0';
return (char *)memcpy(dup, s, len);
}

View File

@ -20,10 +20,8 @@
#include "Common.h"
#include "IniFile.h"
#include "ConfigManager.h"
#if defined(__APPLE__)
#include "FileUtil.h"
#endif
SConfig SConfig::m_Instance;
@ -119,23 +117,14 @@ void SConfig::LoadSettings()
{
IniFile ini;
ini.Load(CONFIG_FILE);
#if defined(__APPLE__)
std::string PluginsDir = File::GetPluginsDirectory();
// Hard coded default
m_DefaultGFXPlugin = PluginsDir + DEFAULT_GFX_PLUGIN;
m_DefaultDSPPlugin = PluginsDir + DEFAULT_DSP_PLUGIN;
m_DefaultPADPlugin = PluginsDir + DEFAULT_PAD_PLUGIN;
m_DefaultWiiMotePlugin = PluginsDir + DEFAULT_WIIMOTE_PLUGIN;
#else
// Hard coded default plugin
{
m_DefaultGFXPlugin = PLUGINS_DIR DIR_SEP DEFAULT_GFX_PLUGIN;
m_DefaultDSPPlugin = PLUGINS_DIR DIR_SEP DEFAULT_DSP_PLUGIN;
m_DefaultPADPlugin = PLUGINS_DIR DIR_SEP DEFAULT_PAD_PLUGIN;
m_DefaultWiiMotePlugin = PLUGINS_DIR DIR_SEP DEFAULT_WIIMOTE_PLUGIN;
}
#endif
// General
{
ini.Get("General", "LastFilename", &m_LastFilename);

View File

@ -23,7 +23,6 @@ files = [
'VertexManager.cpp',
'VertexLoaderManager.cpp',
'XFB.cpp',
'XFStructs.cpp',
'TextureConversionShader.cpp',
'OnScreenDisplay.cpp',
]