// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool FilesystemNode::operator<(const FilesystemNode& node) const { if (isDirectory() != node.isDirectory()) return isDirectory(); return BSPF_strcasecmp(getDisplayName().c_str(), node.getDisplayName().c_str()) < 0; }
bool File::open(const FilesystemNode &node, AccessMode mode) { assert(mode == kFileReadMode || mode == kFileWriteMode); String filename(node.displayName()); if (_handle) { error("File::open: This file object already is opened (%s), won't open '%s'", _name.c_str(), filename.c_str()); } clearIOFailed(); _name.clear(); const char *modeStr = (mode == kFileReadMode) ? "rb" : "wb"; _handle = fopen(node.path().c_str(), modeStr); if (_handle == NULL) { if (mode == kFileReadMode) debug(2, "File %s not found", filename.c_str()); else debug(2, "File %s not opened", filename.c_str()); return false; } _name = filename; #ifdef DEBUG_FILE_REFCOUNT warning("File::open on file '%s'", _name.c_str()); #endif return true; }
bool FilesystemNode::operator< (const FilesystemNode& node) const { if (isDirectory() && !node.isDirectory()) return true; if (!isDirectory() && node.isDirectory()) return false; return scumm_stricmp(displayName().c_str(), node.displayName().c_str()) < 0; }
void File::addDefaultDirectoryRecursive(const FilesystemNode &dir, int level, const String &prefix) { if (level <= 0) return; FSList fslist; if (!dir.listDir(fslist, FilesystemNode::kListAll)) { // Failed listing the contents of this node, so it is either not a // directory, or just doesn't exist at all. return; } if (!_defaultDirectories) _defaultDirectories = new StringIntMap; // Do not add directories multiple times, unless this time they are added // with a bigger depth. const String &directory(dir.path()); if (_defaultDirectories->contains(directory) && (*_defaultDirectories)[directory] >= level) return; (*_defaultDirectories)[directory] = level; if (!_filesMap) _filesMap = new FilesMap; for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { if (file->isDirectory()) { addDefaultDirectoryRecursive(file->path(), level - 1, prefix + file->displayName() + "/"); } else { String lfn(prefix); lfn += file->displayName(); lfn.toLowercase(); if (!_filesMap->contains(lfn)) { (*_filesMap)[lfn] = file->path(); } } } }