From ce678a2d4ddf1de227ca0ab4d738a2b6bbeae651 Mon Sep 17 00:00:00 2001 From: Heewa Barfchin Date: Wed, 12 May 2021 21:55:04 -0400 Subject: [PATCH] Fix lost filename in err msg In some circumstances, FileExceptions are constructed empty, then have a filename assigned to them, but the error message in these scenarios is left as the default "unknown" one, which is sometimes shown to users. This change fixes that case to be consistent with instances that are constructed with the filename. --- src/Base/Exception.cpp | 19 ++++++++++++------- src/Base/Exception.h | 1 + 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/Base/Exception.cpp b/src/Base/Exception.cpp index 1efd8c0110..8f8cfc74cf 100644 --- a/src/Base/Exception.cpp +++ b/src/Base/Exception.cpp @@ -248,17 +248,13 @@ const char* XMLAttributeError::what() const throw() FileException::FileException(const char * sMessage, const char * sFileName) : Exception( sMessage ),file(sFileName) { - if (sFileName) { - _sErrMsgAndFileName = _sErrMsg + ": "; - _sErrMsgAndFileName += sFileName; - } + setFileName(sFileName); } FileException::FileException(const char * sMessage, const FileInfo& File) : Exception( sMessage ),file(File) { - _sErrMsgAndFileName = _sErrMsg + ": "; - _sErrMsgAndFileName += File.fileName(); + setFileName(File.fileName().c_str()); } FileException::FileException() @@ -274,6 +270,15 @@ FileException::FileException(const FileException &inst) { } +void FileException::setFileName(const char * sFileName) { + file.setFile(sFileName); + _sErrMsgAndFileName = _sErrMsg; + if (sFileName) { + _sErrMsgAndFileName += ": "; + _sErrMsgAndFileName += sFileName; + } +} + std::string FileException::getFileName() const { return file.fileName(); @@ -324,7 +329,7 @@ void FileException::setPyObject( PyObject * pydict) Py::Dict edict(pydict); if (edict.hasKey("filename")) - file.setFile(static_cast(Py::String(edict.getItem("filename")))); + setFileName(Py::String(edict.getItem("filename")).as_std_string("utf-8").c_str()); } } diff --git a/src/Base/Exception.h b/src/Base/Exception.h index 7fd38ce75a..0aff3c9e1f 100644 --- a/src/Base/Exception.h +++ b/src/Base/Exception.h @@ -262,6 +262,7 @@ protected: // necessary for what() legacy behaviour as it returns a buffer that // can not be of a temporary object to be destroyed at end of what() std::string _sErrMsgAndFileName; + void setFileName(const char * sFileName=0); }; /**