void CFileContainerArc::List(CFileList &list, const char *mask, unsigned flags) { TString<256> Path; Path = mask; char *name = Path.rchr('/'); FDirInfo *Dir; if (name) { *name++ = 0; Dir = FindDir(Path); if (!Dir) return; // directory not found } else { name = Path; Dir = &Root; } // list directories and files #if FS_DIR != FS_FILE<<1 #error Check FS_DIR / FS_FILE relationship #endif for (unsigned Flag = FS_FILE; Flag <= FS_DIR; Flag <<= 1) { if (!(flags & Flag)) continue; CListIterator it; if (Flag == FS_FILE) // cannot write this as "it = (Flag == FS_FILE) ? ..." it = Dir->Files; else it = Dir->Dirs; for ( ; it; ++it) { if (!appMatchWildcard(it->name, name)) continue; TString<256> Name; Name = it->name; // process NOEXT if (flags & FS_NOEXT) { char *s = Name.rchr('.'); if (s) *s = 0; } CFileItem *item, *place; if (!(item = list.Find(Name, &place))) { item = new (Name, &list) CFileItem; // here: item->flags=0 list.InsertAfter(item, place); } item->flags |= containFlags|Flag; } } }
CFileContainerArc::FFileInfo *CFileContainerArc::FindFile(const char *filename) { TString<256> Path; Path = filename; char *name = Path.rchr('/'); FDirInfo *Dir; if (name) { *name++ = 0; // cut filename from path Dir = FindDir(Path); if (!Dir) return NULL; // directory not found - file does not exists too } else { name = const_cast<char*>(filename); Dir = &Root; } return Dir->Files.Find(name); }
void noAnimal::StandardWalking() { // neuen Weg suchen unsigned char dir = FindDir(); if( dir == 0xFF) { // Sterben, weil kein Weg mehr gefunden wurde Die(); // Jäger ggf. Bescheid sagen (falls der es nicht mehr rechtzeitig schafft, bis ich verwest bin) if(hunter) { hunter->AnimalLost(); hunter = 0; } } else { // weiterlaufen StartWalking(dir); } }
farfile_t FAR_GetFile(far_t hArc, const char* path) { FARobj_t* pArc = F(hArc); if (*path == '/') path ++; FARentry_t* entArr = pArc->entries; int entNum = pArc->ntopentries; for (;;) { char* endPos = strchr(path, '/'); if (endPos) { // Directory int z = endPos - path; char buf[z + 1]; memcpy(buf, path, z); buf[z] = 0; FARentry_t* eDir = FindDir(pArc, entArr, entNum, buf); if (!eDir) return NULL; entArr = (FARentry_t*)((byte_t*)pArc->entries + eDir->dataoff - sizeof(FARheader_t)); entNum = eDir->size; path = endPos + 1; continue; } FARentry_t* eFile = FindFile(pArc, entArr, entNum, path); if (!eFile) return NULL; FARfileobj_t* pFile = new_FF(); if (!pFile) return NULL; pFile->a = pArc; pFile->size = eFile->size; pFile->base = eFile->dataoff; pFile->pos = 0; return pFile; } }
void Tempfile::MakeTemp() { if ((fd = mkstemp(file)) < 0) { f = NULL; goto error; } if (this->useFopen) { if ((f = fdopen(fd, "w+b")) == NULL) goto error; } fchmod(fd, S_IRUSR | S_IWUSR); error = 0; return; error: putlog(LOG_ERRORS, "*", "Couldn't create temporary file '%s': %s", file, strerror(errno)); error = 1; /* Since we failed to create a file in the given tempdir, let's try finding a new one */ if (!looking) { /* ... Not finding a new tempdir is fatal. */ if (FindDir() == ERROR) { delete[] file; file = NULL; return; } /* ... If we found one, let's try all over! */ else { error = 0; delete[] file; file = NULL; AllocTempfile(); } } }