//--------------------------------------------------------------------- void FileSystemLayer::getConfigPaths() { // try to determine the application's path: // recent systems should provide the executable path via the /proc system Ogre::String appPath = resolveSymlink("/proc/self/exe"); if (appPath.empty()) { // if /proc/self/exe isn't available, try it via the program's pid pid_t pid = getpid(); char proc[64]; int retval = snprintf(proc, sizeof(proc), "/proc/%llu/exe", (unsigned long long) pid); if (retval > 0 && retval < (long)sizeof(proc)) appPath = resolveSymlink(proc); } if (!appPath.empty()) { // we need to strip the executable name from the path Ogre::String::size_type pos = appPath.rfind('/'); if (pos != Ogre::String::npos) appPath.erase(pos); } else { // couldn't find actual executable path, assume current working dir appPath = "."; } // use application path as first config search path mConfigPaths.push_back(appPath + '/'); // then search inside ../share/OGRE mConfigPaths.push_back(appPath + "/../share/OGRE/"); // then try system wide /etc mConfigPaths.push_back("/etc/OGRE/"); }
void FileSystemLayer::getConfigPaths() { #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 // try to determine the application's path DWORD bufsize = 256; char* resolved = 0; do { char* buf = OGRE_ALLOC_T(char, bufsize, Ogre::MEMCATEGORY_GENERAL); DWORD retval = GetModuleFileName(NULL, buf, bufsize); if (retval == 0) { // failed OGRE_FREE(buf, Ogre::MEMCATEGORY_GENERAL); break; } if (retval < bufsize) { // operation was successful. resolved = buf; } else { // buffer was too small, grow buffer and try again OGRE_FREE(buf, Ogre::MEMCATEGORY_GENERAL); bufsize <<= 1; } } while (!resolved); Ogre::String appPath = resolved; if (resolved) OGRE_FREE(resolved, Ogre::MEMCATEGORY_GENERAL); if (!appPath.empty()) { // need to strip the application filename from the path Ogre::String::size_type pos = appPath.rfind('\\'); if (pos != Ogre::String::npos) appPath.erase(pos); } else { // fall back to current working dir appPath = "."; } #elif OGRE_PLATFORM == OGRE_PLATFORM_WINRT Ogre::String appPath; if(!widePathToOgreString(appPath, Windows::ApplicationModel::Package::Current->InstalledLocation->Path->Data())) { // fallback to current working dir appPath = "."; } #endif // use application path as config search path mConfigPaths.push_back(appPath + '\\'); }