From 0571f5393e5e47620fd317d4d0c365769ae0c08b Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 12 Dec 2008 19:16:32 +0100 Subject: [PATCH] rename Foam::dotFoam() -> Foam::findEtcFile() with an optional 'mandatory' argument - if mandatory is true, findEtcFile() will abort with a message (via cerr). This allows a non-existent file to be caught at the lowest level and avoid error handling in IFstream, which might not be initialized at that stage. --- applications/test/fileName/fileNameTest.C | 12 +++++++++++- .../thermophysical/adiabaticFlameT/adiabaticFlameT.C | 2 +- .../equilibriumFlameT/equilibriumFlameT.C | 2 +- .../mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C | 2 +- src/OSspecific/Unix/Unix.C | 11 ++++++++++- src/OpenFOAM/include/OSspecific.H | 3 ++- .../meshShapes/cellModeller/globalCellModeller.C | 2 +- src/OpenFOAM/primitives/strings/string/string.C | 2 +- src/OpenFOAM/primitives/strings/string/string.H | 4 ++-- 9 files changed, 30 insertions(+), 10 deletions(-) diff --git a/applications/test/fileName/fileNameTest.C b/applications/test/fileName/fileNameTest.C index 99642333c6..c3a36f49e1 100644 --- a/applications/test/fileName/fileNameTest.C +++ b/applications/test/fileName/fileNameTest.C @@ -32,6 +32,7 @@ Description #include "fileName.H" #include "IOstreams.H" +#include "OSspecific.H" using namespace Foam; @@ -57,7 +58,16 @@ int main() Info<< "pathName.components() = " << pathName.components() << endl; Info<< "pathName.component(2) = " << pathName.component(2) << endl; - Info<< "end" << endl; + + // test findEtcFile + Info<< "\n\nfindEtcFile tests:" << nl + << " controlDict => " << findEtcFile("controlDict") << nl + << " badName => " << findEtcFile("badName") << endl; + Info<< "This should emit a fatal error:" << endl; + Info<< " badName(die) => " << findEtcFile("badName", true) << nl + << endl; + + Info<< "\nEnd" << endl; return 0; } diff --git a/applications/utilities/thermophysical/adiabaticFlameT/adiabaticFlameT.C b/applications/utilities/thermophysical/adiabaticFlameT/adiabaticFlameT.C index 3d494b6cc0..be274ec4ce 100644 --- a/applications/utilities/thermophysical/adiabaticFlameT/adiabaticFlameT.C +++ b/applications/utilities/thermophysical/adiabaticFlameT/adiabaticFlameT.C @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) Info<< nl << "Reading Burcat data dictionary" << endl; - fileName BurcatCpDataFileName(dotFoam("thermoData/BurcatCpData")); + fileName BurcatCpDataFileName(findEtcFile("thermoData/BurcatCpData")); // Construct control dictionary IFstream BurcatCpDataFile(BurcatCpDataFileName); diff --git a/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C b/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C index 56767eecb3..444570046a 100644 --- a/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C +++ b/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C @@ -79,7 +79,7 @@ int main(int argc, char *argv[]) Info<< nl << "Reading Burcat data dictionary" << endl; - fileName BurcatCpDataFileName(dotFoam("thermoData/BurcatCpData")); + fileName BurcatCpDataFileName(findEtcFile("thermoData/BurcatCpData")); // Construct control dictionary IFstream BurcatCpDataFile(BurcatCpDataFileName); diff --git a/applications/utilities/thermophysical/mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C b/applications/utilities/thermophysical/mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C index c3ee5e81fd..392c2e062f 100644 --- a/applications/utilities/thermophysical/mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C +++ b/applications/utilities/thermophysical/mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C @@ -77,7 +77,7 @@ int main(int argc, char *argv[]) Info<< nl << "Reading Burcat data dictionary" << endl; - fileName BurcatCpDataFileName(dotFoam("thermoData/BurcatCpData")); + fileName BurcatCpDataFileName(findEtcFile("thermoData/BurcatCpData")); // Construct control dictionary IFstream BurcatCpDataFile(BurcatCpDataFileName); diff --git a/src/OSspecific/Unix/Unix.C b/src/OSspecific/Unix/Unix.C index 8f4ddafdb8..271d4a442b 100644 --- a/src/OSspecific/Unix/Unix.C +++ b/src/OSspecific/Unix/Unix.C @@ -211,7 +211,7 @@ bool Foam::chDir(const fileName& dir) } -Foam::fileName Foam::dotFoam(const fileName& name) +Foam::fileName Foam::findEtcFile(const fileName& name, bool mandatory) { // Search user files: // ~~~~~~~~~~~~~~~~~~ @@ -268,6 +268,15 @@ Foam::fileName Foam::dotFoam(const fileName& name) } // Not found + // abort if the file is mandatory, otherwise return null + if (mandatory) + { + cerr<< "--> FOAM FATAL ERROR in Foam::findEtcFile() :" + " could not find mandatory file\n '" + << name.c_str() << "'\n\n" << std::endl; + ::exit(1); + } + return fileName::null; } diff --git a/src/OpenFOAM/include/OSspecific.H b/src/OpenFOAM/include/OSspecific.H index 9bfb08b069..169620865e 100644 --- a/src/OpenFOAM/include/OSspecific.H +++ b/src/OpenFOAM/include/OSspecific.H @@ -102,7 +102,8 @@ bool chDir(const fileName& dir); // - $WM_PROJECT_DIR/etc/ // // @return the full path name or fileName::null if the name cannot be found -fileName dotFoam(const fileName& name); +// Optionally abort if the file cannot be found +fileName findEtcFile(const fileName& name, bool mandatory=false); //- Make a directory and return an error if it could not be created // and does not already exist diff --git a/src/OpenFOAM/meshes/meshShapes/cellModeller/globalCellModeller.C b/src/OpenFOAM/meshes/meshShapes/cellModeller/globalCellModeller.C index 54e73f855b..f616f2d6df 100644 --- a/src/OpenFOAM/meshes/meshShapes/cellModeller/globalCellModeller.C +++ b/src/OpenFOAM/meshes/meshShapes/cellModeller/globalCellModeller.C @@ -40,7 +40,7 @@ namespace Foam // PtrList of models PtrList cellModeller::models_ ( - (IFstream(dotFoam("cellModels"))()) + IFstream(findEtcFile("cellModels", true))() ); // List of model pointers diff --git a/src/OpenFOAM/primitives/strings/string/string.C b/src/OpenFOAM/primitives/strings/string/string.C index b3c218eacd..38393bfca7 100644 --- a/src/OpenFOAM/primitives/strings/string/string.C +++ b/src/OpenFOAM/primitives/strings/string/string.C @@ -202,7 +202,7 @@ Foam::string& Foam::string::expand() // otherwise add extra test if (user == "OpenFOAM") { - *this = dotFoam(file); + *this = findEtcFile(file); } else { diff --git a/src/OpenFOAM/primitives/strings/string/string.H b/src/OpenFOAM/primitives/strings/string/string.H index 82cc904ef4..13e996b511 100644 --- a/src/OpenFOAM/primitives/strings/string/string.H +++ b/src/OpenFOAM/primitives/strings/string/string.H @@ -34,7 +34,7 @@ Description Used as a base class for word and fileName. See Also - Foam::dotFoam() for information about the site/user OpenFOAM + Foam::findEtcFile() for information about the site/user OpenFOAM configuration directory SourceFiles @@ -176,7 +176,7 @@ public: // - leading "~OpenFOAM" : site/user OpenFOAM configuration directory // // @sa - // Foam::dotFoam + // Foam::findEtcFile string& expand(); //- Remove repeated characters returning true if string changed