/** @brief Write DemoFileHeader Write the DemoFileHeader at the start of the file and restores the original position in the file afterwards. */ unsigned int CDemoRecorder::WriteFileHeader(bool updateStreamLength) { #ifdef _MSC_VER // MSVC8 behaves strange if tell/seek is called before anything has been written const bool empty = (demoStream.str() == ""); const unsigned int pos = empty? 0 : demoStream.tellp(); #else const unsigned int pos = demoStream.tellp(); #endif DemoFileHeader tmpHeader; memcpy(&tmpHeader, &fileHeader, sizeof(fileHeader)); if (!updateStreamLength) tmpHeader.demoStreamSize = 0; tmpHeader.swab(); // to little endian #ifdef _MSC_VER if (!empty) #endif { demoStream.seekp(0); } demoStream.write((char*) &tmpHeader, sizeof(tmpHeader)); demoStream.seekp(pos); return pos; }
/** @brief Write DemoFileHeader Write the DemoFileHeader at the start of the file and restores the original position in the file afterwards. */ void CDemoRecorder::WriteFileHeader(bool updateStreamLength) { int pos = recordDemo.tellp(); recordDemo.seekp(0); DemoFileHeader tmpHeader; memcpy(&tmpHeader, &fileHeader, sizeof(fileHeader)); if (!updateStreamLength) tmpHeader.demoStreamSize = 0; tmpHeader.swab(); // to little endian recordDemo.write((char*)&tmpHeader, sizeof(tmpHeader)); recordDemo.seekp(pos); }