Fix build errors.

Fix VFS root directory failing IsDirectory, which breaks the search for
textures.xml.
Fix incompatible change to loose cache name determination.

This was SVN commit r9092.
This commit is contained in:
Ykkrosh 2011-03-21 21:06:08 +00:00
parent c3405e6f50
commit 83271ec816
6 changed files with 11 additions and 10 deletions

View File

@ -53,6 +53,7 @@ struct TPhash
return (*this)(a->m_Properties);
}
};
struct TPequal_to
: std::binary_function<CTextureProperties, CTextureProperties, bool>,
std::binary_function<CTexturePtr, CTexturePtr, bool>

View File

@ -76,8 +76,8 @@ namespace Path {
template<class Path_t>
static inline bool IsDirectory(const Path_t& pathname)
{
if(pathname.empty()) // (ensure back() is safe)
return false; // (the VFS root directory is represented as an empty string)
if(pathname.empty()) // (ensure length()-1 is safe)
return true; // (the VFS root directory is represented as an empty string)
// note: ideally, path strings would only contain '/' or even SYS_DIR_SEP.
// however, windows-specific code (e.g. the sound driver detection)
@ -86,7 +86,7 @@ static inline bool IsDirectory(const Path_t& pathname)
// also, the self-tests verify correct operation of such strings.
// it would be error-prone to only test the platform's separator
// strings there. hence, we allow all separators here.
return pathname.back() == '/' || pathname.back() == '\\';
return pathname[pathname.length()-1] == '/' || pathname[pathname.length()-1] == '\\';
}
template<class Path_t>

View File

@ -237,7 +237,7 @@ LibError dir_watch_Poll(DirWatchNotifications& notifications)
continue;
}
DirWatch* dirWatch = (DirWatch*)polled_notifications[i].userdata;
NativePath pathname = Path::Join(dirWatch->path, polled_notifications[i].filename);
NativePath pathname = Path::Join(dirWatch->path, NativePathFromString(polled_notifications[i].filename));
notifications.push_back(DirWatchNotification(pathname, type));
}

View File

@ -142,7 +142,7 @@ VfsPath CCacheLoader::LooseCachePath(const VfsPath& sourcePath, const MD5& initi
digestPrefix << std::setfill(L'0') << std::setw(2) << (int)digest[i];
// Construct the final path
return Path::Join("cache", Path::ChangeExtension(sourcePath, std::wstring(L".") + digestPrefix.str() + m_FileExtension));
return Path::Join("cache", Path::ChangeExtension(sourcePath, Path::Extension(sourcePath) + std::wstring(L".") + digestPrefix.str() + m_FileExtension));
// TODO: we should probably include the mod name, once that's possible (http://trac.wildfiregames.com/ticket/564)
}

View File

@ -37,7 +37,7 @@ Paths::Paths(const CmdLineArgs& args)
m_rdata = Path::Join(m_root, "data/");
#endif
const wchar_t* subdirectoryName = args.Has("writableRoot")? 0 : L"0ad";
const char* subdirectoryName = args.Has("writableRoot")? 0 : "0ad";
// everything is a subdirectory of the root
if(!subdirectoryName)
@ -59,9 +59,9 @@ Paths::Paths(const CmdLineArgs& args)
const char* envHome = getenv("HOME");
debug_assert(envHome);
const NativePath home(wstring_from_utf8(envHome));
const NativePath xdgData = XDG_Path("XDG_DATA_HOME", home, Path::Join(home, ".local/share/"), subdirectoryName));
const NativePath xdgConfig = XDG_Path("XDG_CONFIG_HOME", home, Path::Join(home, ".config/"), subdirectoryName));
const NativePath xdgCache = XDG_Path("XDG_CACHE_HOME", home, Path::Join(home, ".cache/"), subdirectoryName));
const NativePath xdgData = Path::Join(XDG_Path("XDG_DATA_HOME", home, Path::Join(home, ".local/share/")), subdirectoryName);
const NativePath xdgConfig = Path::Join(XDG_Path("XDG_CONFIG_HOME", home, Path::Join(home, ".config/")), subdirectoryName);
const NativePath xdgCache = Path::Join(XDG_Path("XDG_CACHE_HOME", home, Path::Join(home, ".cache/")), subdirectoryName);
m_data = Path::AddSlash(xdgData);
m_cache = Path::AddSlash(xdgCache);
m_config = Path::AddSlash(Path::Join(xdgConfig, "config"));

View File

@ -278,7 +278,7 @@ JSBool GetBuildTimestamp(JSContext* cx, uintN argc, jsval* vp)
void DumpHeap(const char* basename, int idx, JSContext* cx)
{
char filename[64];
sprintf_s(filename, ARRAY_SIZE(filename), "%hs.%03d.txt", basename, idx);
sprintf_s(filename, ARRAY_SIZE(filename), "%s.%03d.txt", basename, idx);
NativePath pathname = Path::Join(psLogDir(), filename);
#if OS_WIN
FILE* f = _wfopen(pathname.c_str(), L"w");