Foam::IFstreamAllocator::IFstreamAllocator(const fileName& pathname) : ifPtr_(NULL), compression_(IOstream::UNCOMPRESSED) { if (pathname.empty()) { if (IFstream::debug) { Info<< "IFstreamAllocator::IFstreamAllocator(const fileName&) : " "cannot open null file " << endl; } } ifPtr_ = new ifstream(pathname.c_str()); // If the file is compressed, decompress it before reading. if (!ifPtr_->good() && isFile(pathname + ".gz", false)) { if (IFstream::debug) { Info<< "IFstreamAllocator::IFstreamAllocator(const fileName&) : " "decompressing " << pathname + ".gz" << endl; } delete ifPtr_; ifPtr_ = new igzstream((pathname + ".gz").c_str()); if (ifPtr_->good()) { compression_ = IOstream::COMPRESSED; } } }
void Foam::codedFunctionObject::unloadLibrary ( const fileName& libPath, const string& globalFuncName, const dictionary& contextDict ) const { void* lib = 0; if (libPath.empty()) { return; } dlLibraryTable& libs = const_cast<Time&>(time_).libs(); lib = libs.findLibrary(libPath); if (!lib) { return; } // provision for manual execution of code before unloading if (dlSymFound(lib, globalFuncName)) { loaderFunctionType function = reinterpret_cast<loaderFunctionType> ( dlSym(lib, globalFuncName) ); if (function) { (*function)(false); // force unload } else { FatalIOErrorIn ( "codedFunctionObject::unloadLibrary()", contextDict ) << "Failed looking up symbol " << globalFuncName << nl << "from " << libPath << exit(FatalIOError); } } if (!libs.close(libPath, false)) { FatalIOErrorIn ( "codedFunctionObject::" "updateLibrary()", contextDict ) << "Failed unloading library " << libPath << exit(FatalIOError); } }
bool mkDir(const fileName& pathName, const mode_t mode) { if (pathName.empty()) { return false; } bool success = ::CreateDirectory(pathName.c_str(), NULL); if (success) { chMod(pathName, mode); } else { const DWORD error = ::GetLastError(); switch (error) { case ERROR_ALREADY_EXISTS: { success = true; break; } case ERROR_PATH_NOT_FOUND: { // Part of the path does not exist so try to create it const fileName& parentName = pathName.path(); if (parentName.size() && mkDir(parentName, mode)) { success = mkDir(pathName, mode); } break; } } if (!success) { FatalErrorIn("mkDir(const fileName&, mode_t)") << "Couldn't create directory: " << pathName << " " << MSwindows::getLastError() << exit(FatalError); } } return success; }
void getRootCase(fileName& casePath) { casePath.clean(); if (casePath.empty() || casePath == ".") { // handle degenerate form and '.' casePath = cwd(); } else if (casePath[0] != '/' && casePath.name() == "..") { // avoid relative cases ending in '..' - makes for very ugly names casePath = cwd()/casePath; casePath.clean(); } }
Foam::OFstreamAllocator::OFstreamAllocator ( const fileName& pathname, ios_base::openmode mode, IOstream::compressionType compression ) : ofPtr_(NULL) { if (pathname.empty()) { if (OFstream::debug) { Info<< "OFstreamAllocator::OFstreamAllocator(const fileName&) : " "cannot open null file " << endl; } } if (compression == IOstream::COMPRESSED) { // get identically named uncompressed version out of the way if (isFile(pathname, false)) { rm(pathname); } ofPtr_ = new ogzstream((pathname + ".gz").c_str()); } else { // get identically named compressed version out of the way if (isFile(pathname + ".gz", false)) { rm(pathname + ".gz"); } ofPtr_ = new ofstream(pathname.c_str()); } }
bool Foam::mkDir(const fileName& pathName, mode_t mode) { // empty names are meaningless if (pathName.empty()) { return false; } // Construct instance path directory if does not exist if (::mkdir(pathName.c_str(), mode) == 0) { // Directory made OK so return true return true; } else { switch (errno) { case EPERM: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "The filesystem containing " << pathName << " does not support the creation of directories." << exit(FatalError); return false; } case EEXIST: { // Directory already exists so simply return true return true; } case EFAULT: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "" << pathName << " points outside your accessible address space." << exit(FatalError); return false; } case EACCES: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "The parent directory does not allow write " "permission to the process,"<< nl << "or one of the directories in " << pathName << " did not allow search (execute) permission." << exit(FatalError); return false; } case ENAMETOOLONG: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "" << pathName << " is too long." << exit(FatalError); return false; } case ENOENT: { // Part of the path does not exist so try to create it if (pathName.path().size() && mkDir(pathName.path(), mode)) { return mkDir(pathName, mode); } else { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "Couldn't create directory " << pathName << exit(FatalError); return false; } } case ENOTDIR: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "A component used as a directory in " << pathName << " is not, in fact, a directory." << exit(FatalError); return false; } case ENOMEM: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "Insufficient kernel memory was available to make " "directory " << pathName << '.' << exit(FatalError); return false; } case EROFS: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "" << pathName << " refers to a file on a read-only filesystem." << exit(FatalError); return false; } case ELOOP: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "Too many symbolic links were encountered in resolving " << pathName << '.' << exit(FatalError); return false; } case ENOSPC: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "The device containing " << pathName << " has no room for the new directory or " << "the user's disk quota is exhausted." << exit(FatalError); return false; } default: { FatalErrorIn("Foam::mkDir(const fileName&, mode_t)") << "Couldn't create directory " << pathName << exit(FatalError); return false; } } } }