bool Foam::IOobject::fileNameComponents ( const fileName& path, fileName& instance, fileName& local, word& name ) { instance.clear(); local.clear(); name.clear(); // called with directory if (isDir(path)) { WarningIn ( "IOobject::fileNameComponents" "(" "const fileName&, " "fileName&, " "fileName&, " "word&" ")" ) << " called with directory: " << path << endl; return false; } if (path.isAbsolute()) { string::size_type last = path.rfind('/'); instance = path.substr(0, last); // Check afterwards name.string::operator=(path.substr(last+1)); } else { string::size_type first = path.find('/'); if (first == string::npos) { // no '/' found - no instance or local // check afterwards name.string::operator=(path); } else { instance = path.substr(0, first); string::size_type last = path.rfind('/'); if (last > first) { // with local local = path.substr(first+1, last-first-1); } // check afterwards name.string::operator=(path.substr(last+1)); } } // Check for valid (and stripped) name, regardless of the debug level if (name.empty() || string::stripInvalid<word>(name)) { WarningIn ( "IOobject::fileNameComponents" "(" "const fileName&, " "fileName&, " "fileName&, " "word&" ")" ) << "has invalid word for name: \"" << name << "\"\nwhile processing path: " << path << endl; return false; } return true; }