diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index c5458159329862f4a4a9ea1012a6e40659d46e46..8a2c513fa0570b839410fa3f1e0a535a3c290274 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -392,6 +392,12 @@ int main(int argc, char *argv[]) Info<< "Using existing processor directories" << nl; } + if (args.optionFound("region")) + { + procDirsProblem = false; + forceOverwrite = false; + } + if (forceOverwrite) { Info<< "Removing " << nProcs diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C index 9fa15a2e524a92ff70183d6b81a756bece1f5b9a..708375bfadd8a8ce87dd64e8aa48943d983d222a 100644 --- a/src/OSspecific/POSIX/POSIX.C +++ b/src/OSspecific/POSIX/POSIX.C @@ -884,6 +884,32 @@ bool Foam::cp(const fileName& src, const fileName& dest, const bool followLink) return false; } + char* realSrcPath = realpath(src.c_str(), nullptr); + char* realDestPath = realpath(destFile.c_str(), nullptr); + const bool samePath = strcmp(realSrcPath, realDestPath) == 0; + + if (POSIX::debug && samePath) + { + InfoInFunction + << "Attempt to copy " << realSrcPath << " to itself" << endl; + } + + if (realSrcPath) + { + free(realSrcPath); + } + + if (realDestPath) + { + free(realDestPath); + } + + // Do not copy over self when src is actually a link to dest + if (samePath) + { + return false; + } + // Copy files fileNameList contents = readDir(src, fileName::FILE, false, followLink); forAll(contents, i) diff --git a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C index 5949754fe75fb7936dc8cdb0f1d0811dde88906e..110849d575906b4cb34183c6eb1abf12988af3a3 100644 --- a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C +++ b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C @@ -591,14 +591,7 @@ Foam::label Foam::fileOperation::nProcs label nProcs = 0; while ( - isDir - ( - dir - /(word("processor") + name(nProcs)) - /"constant" - /local - /polyMesh::meshSubDir - ) + isDir(dir/(word("processor") + name(nProcs))) ) { ++nProcs;