forked from 0ad/0ad
janwas
e6be7e36d2
ERR_(FILE|PATH)_NOT_FOUND -> ERR_TNODE_NOT_FOUND, ERR_NOT_(FILE|DIR) -> ERR_TNODE_WRONG TYPE path_util: - path_append: bugfix (no more extraneous /); add support for appending slash - path_replace: bugfix (no more warnings for expected error) - add path_last_component, path_foreach_component - move some defs to the header that belong there from vfs.h/path.h file: add dir_create; move PosixFile definition here and provide accessor for fileio vfs: no longer automatically append slash; instead, make sure caller does vfs_mount: - mount_realpath: bugfix (strip trailing /), interface improvement - document write_target; clarify MULTIPLE_MOUNTINGS; add support for creating real dirs vfs_tree: - refactor TDir::add into find, add, find_and_add - fix TDir and TNode for dir-ends-with-slash requirement - split up lookup into lookup_cb and path_foreach_component - add support for inserting dirs with given mount point: tree_add_path (needed when mounting) wposix: get rid of weird PATH_MAX = 260 (Win32 weirdness) TextureManager: remove no longer needed SupportedTextureFormats GameSetup, Xeromyces: setup XMB location to data/cache/mods/official/xmb Util: HardcodedErrorString now uses error_description_r VFSUtil, i18n: fixes for dir slash issue Closes #79, #80 This was SVN commit r3874.
47 lines
889 B
C++
47 lines
889 B
C++
#include "precompiled.h"
|
|
|
|
#include "VFSUtil.h"
|
|
#include "lib/res/file/vfs.h"
|
|
|
|
#include "CLogger.h"
|
|
#define LOG_CATEGORY "vfs"
|
|
|
|
#include <deque>
|
|
|
|
using namespace VFSUtil;
|
|
|
|
// Because I'm lazy, and it saves a few lines of code in other places:
|
|
bool VFSUtil::FindFiles (const CStr& dirname, const char* filter, FileList& files)
|
|
{
|
|
files.clear();
|
|
|
|
Handle dir = vfs_dir_open(dirname);
|
|
if (dir <= 0)
|
|
{
|
|
LOG(ERROR, LOG_CATEGORY, "Error opening directory '%s' (%lld)", dirname.c_str(), dir);
|
|
return false;
|
|
}
|
|
|
|
int err;
|
|
DirEnt entry;
|
|
while ((err = vfs_dir_next_ent(dir, &entry, filter)) == 0)
|
|
{
|
|
CStr path = dirname+entry.name;
|
|
if(DIRENT_IS_DIR(&entry))
|
|
path += '/';
|
|
files.push_back(path);
|
|
}
|
|
|
|
if (err != ERR_DIR_END)
|
|
{
|
|
LOG(ERROR, LOG_CATEGORY, "Error reading files from directory '%s' (%d)", dirname.c_str(), err);
|
|
return false;
|
|
}
|
|
|
|
vfs_dir_close(dir);
|
|
|
|
return true;
|
|
|
|
}
|
|
|