From 0a7eb6e6dce1333037e67674cc3a9673c3973eb1 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Thu, 25 Jun 2020 09:40:21 +0200 Subject: [PATCH] BUG: bad names if ensight mask contains NO placeholder (fixes #1747) - affects ensightSurfaceReader only. If there are no `*` characters, protect against replacement. Otherwise it would attempt to replace a zero-length string with a single `0`, which results in prepending the name. STYLE: ensightSurfaceReader constructor explicit --- .../readers/ensight/ensightSurfaceReader.C | 22 +++++++++++++------ .../readers/ensight/ensightSurfaceReader.H | 9 ++++---- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C index 25f1b63e5b3..f8427951417 100644 --- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C +++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C @@ -127,16 +127,24 @@ Foam::fileName Foam::ensightSurfaceReader::replaceMask ( const fileName& fName, const label timeIndex -) const +) { fileName result(fName); - std::ostringstream oss; - label nMask = stringOps::count(fName, '*'); - const std::string maskStr(nMask, '*'); - oss << std::setfill('0') << std::setw(nMask) << timeIndex; - const word indexStr = oss.str(); - result.replace(maskStr, indexStr); + const auto nMask = stringOps::count(fName, '*'); + + // If there are any '*' chars, they are assumed to be contiguous + // Eg, data/******/geometry + + if (nMask) + { + std::ostringstream oss; + oss << std::setfill('0') << std::setw(nMask) << timeIndex; + + const std::string maskStr(nMask, '*'); + const std::string indexStr = oss.str(); + result.replace(maskStr, indexStr); + } return result; } diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H index da725dc315e..ec120d79230 100644 --- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H +++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H @@ -112,12 +112,12 @@ protected: //- Read and check a section header void debugSection(const word& expected, IFstream& is) const; - //- Replace the mask with an 0 padded string - fileName replaceMask + //- Replace the '*' mask chars with a 0 padded string. + static fileName replaceMask ( const fileName& fName, const label timeIndex - ) const; + ); //- Read (and discard) geometry file header. // \return information about node/element id handling @@ -158,10 +158,11 @@ public: //- Runtime type information TypeName("ensight"); + // Constructors //- Construct from fileName - ensightSurfaceReader(const fileName& fName); + explicit ensightSurfaceReader(const fileName& fName); //- Destructor -- GitLab