From 3280b24e5bc351fbef922c5b5a9456fc7c8bc318 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Sat, 5 Feb 2022 18:21:39 +0100 Subject: [PATCH] #18 fix bugs when reading DVtool file --- DStarBase/DVTOOLFileReader.cpp | 14 ++++++++++---- DStarBase/DVTOOLFileReader.h | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/DStarBase/DVTOOLFileReader.cpp b/DStarBase/DVTOOLFileReader.cpp index 773dcb6..0e3e2b5 100644 --- a/DStarBase/DVTOOLFileReader.cpp +++ b/DStarBase/DVTOOLFileReader.cpp @@ -23,6 +23,7 @@ #include "DVTOOLFileReader.h" #include "DStarDefines.h" +#include "Utils.h" static const char DVTOOL_SIGNATURE[] = "DVTOOL"; static const unsigned int DVTOOL_SIGNATURE_LENGTH = 6U; @@ -48,7 +49,8 @@ m_records(0U), m_type(DVTFR_NONE), m_buffer(NULL), m_length(0U), -m_seqNo(0U) +m_seqNo(0U), +m_closed(true) { m_buffer = new unsigned char[BUFFER_LENGTH]; } @@ -95,8 +97,9 @@ bool CDVTOOLFileReader::open(const std::string& fileName) return false; } - m_records = ntohl(uint32); + m_records = CUtils::swap_endian_le(uint32); m_seqNo = 0U; + m_closed = false; return true; } @@ -108,7 +111,7 @@ DVTFR_TYPE CDVTOOLFileReader::read() if (n != 1) return DVTFR_NONE; - m_length = htons(uint16) - 15U; + m_length = CUtils::swap_endian_be(uint16) - 15U; unsigned char bytes[FIXED_DATA_LENGTH]; n = fread(bytes, 1, DSVT_SIGNATURE_LENGTH, m_file); @@ -180,5 +183,8 @@ CAMBEData* CDVTOOLFileReader::readData() void CDVTOOLFileReader::close() { - fclose(m_file); + if(!m_closed) + fclose(m_file); + + m_closed = true; } diff --git a/DStarBase/DVTOOLFileReader.h b/DStarBase/DVTOOLFileReader.h index 0625558..0ed316d 100644 --- a/DStarBase/DVTOOLFileReader.h +++ b/DStarBase/DVTOOLFileReader.h @@ -58,4 +58,5 @@ private: unsigned char* m_buffer; unsigned int m_length; unsigned char m_seqNo; + bool m_closed; };