diff --git a/tools/editworld/src/fileparse.cpp b/tools/editworld/src/fileparse.cpp index c0b7c33bb..e643023a4 100644 --- a/tools/editworld/src/fileparse.cpp +++ b/tools/editworld/src/fileparse.cpp @@ -29,38 +29,30 @@ #include "debugprint.h" -CFileParser::CFileParser() : - m_File(NULL) -{ - strcpy(m_Brk,"= \n\r\t"); -} - CFileParser::CFileParser(std::istream& file, short flags) : + m_Flags(flags), m_File(NULL) { - m_Flags = flags; - // Seek to the end to determine the file/stream's size file.seekg(0, std::ios::end); - std::ifstream::pos_type fileSize = file.tellg(); + size_t fileSize = file.tellg(); file.seekg(0); - delete m_File; + // Should throw std::bad_alloc on failure to allocate memory + m_File = new char[fileSize + 1]; - m_File = new char[fileSize + static_cast(1)]; - if(m_File) - { - file.readsome(static_cast(m_File), fileSize); - m_File[fileSize]=0; - } + file.read(m_File, fileSize); + + // Nul terminate string + m_File[fileSize] = 0; m_Pos = m_File; - m_BufferSize = static_cast(fileSize) + 1; + m_BufferSize = fileSize + 1; strcpy(m_Brk,"= \n\r\t"); } -CFileParser::~CFileParser(void) +CFileParser::~CFileParser() { delete m_File; } diff --git a/tools/editworld/src/fileparse.h b/tools/editworld/src/fileparse.h index c5fc3ab21..579ff0678 100644 --- a/tools/editworld/src/fileparse.h +++ b/tools/editworld/src/fileparse.h @@ -43,7 +43,6 @@ struct TokenID class CFileParser { public: - CFileParser(); CFileParser(std::istream& file, short flags); ~CFileParser(); diff --git a/tools/editworld/src/heightmap.cpp b/tools/editworld/src/heightmap.cpp index fbefbb8a9..1cad458c2 100644 --- a/tools/editworld/src/heightmap.cpp +++ b/tools/editworld/src/heightmap.cpp @@ -149,7 +149,7 @@ extern CUndoRedo *g_UndoRedo; extern char g_HomeDirectory[1024]; extern char g_WorkDirectory[1024]; -extern FILE *OpenEditorFile(char *FileName); +extern FILE *OpenEditorFile(const char *FileName); extern std::string EditorDataFileName(const std::string& fileName); char *IMDTypeNames[]={