From 68b9d223b0bb50b667e19f077c8eca778b678ccf Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 21 Jan 2020 13:45:12 +0000 Subject: [PATCH] Add explicit comparisons where we were implicitly checking for non-zero * This fixes some warnings from PVS Studio, though none of these checks were actually wrong it's better to be explicit. --- renderdoc/android/android_utils.cpp | 2 +- renderdoc/android/jdwp_connection.cpp | 2 +- renderdoc/core/replay_proxy.cpp | 4 ++-- renderdoc/driver/d3d11/d3d11_manager.h | 4 ++-- renderdoc/driver/d3d11/d3d11_replay.cpp | 2 +- renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp | 4 ++-- renderdoc/driver/d3d12/d3d12_replay.cpp | 13 ++++--------- renderdoc/driver/gl/gl_common.cpp | 6 +++--- renderdoc/driver/gl/gl_counters.cpp | 6 +++--- renderdoc/driver/gl/gl_replay.cpp | 2 +- renderdoc/driver/gl/gl_resources.h | 4 ++-- renderdoc/driver/gl/gl_shader_refl.cpp | 2 +- renderdoc/driver/gl/wgl_hooks.cpp | 2 +- renderdoc/driver/shaders/dxbc/dxbc_container.cpp | 2 +- renderdoc/driver/shaders/dxbc/dxbc_disassemble.cpp | 2 +- renderdoc/driver/shaders/dxbc/dxbc_spdb.cpp | 3 ++- renderdoc/driver/vulkan/vk_info.cpp | 2 +- renderdoc/driver/vulkan/vk_layer.cpp | 3 ++- renderdoc/driver/vulkan/vk_postvs.cpp | 2 +- renderdoc/os/win32/win32_callstack.cpp | 2 +- renderdoc/os/win32/win32_shellext.cpp | 2 +- renderdoc/replay/capture_file.cpp | 6 +++--- renderdoc/serialise/codecs/xml_codec.cpp | 10 +++++----- 23 files changed, 42 insertions(+), 45 deletions(-) diff --git a/renderdoc/android/android_utils.cpp b/renderdoc/android/android_utils.cpp index 839a6aa73..1f38b4f4b 100644 --- a/renderdoc/android/android_utils.cpp +++ b/renderdoc/android/android_utils.cpp @@ -413,7 +413,7 @@ struct LogLine if(idx + 64 > line.length()) return false; - if(strncmp(&line[idx], "RDOC ", 5)) + if(strncmp(&line[idx], "RDOC ", 5) != 0) return false; idx += 5; diff --git a/renderdoc/android/jdwp_connection.cpp b/renderdoc/android/jdwp_connection.cpp index e7da2e1c4..281248951 100644 --- a/renderdoc/android/jdwp_connection.cpp +++ b/renderdoc/android/jdwp_connection.cpp @@ -63,7 +63,7 @@ Connection::Connection(Network::Socket *sock) char response[15] = {}; reader.Read(response, handshakeLength); - if(memcmp(handshake, response, 14)) + if(memcmp(handshake, response, 14) != 0) { RDCERR("handshake failed - received >%s< - expected >%s<", response, handshake); error = true; diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index 58238e1fc..17c86f9b3 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -1995,7 +1995,7 @@ void ReplayProxy::DeltaTransferBytes(SerialiserType &xferser, bytebuf &reference // if there are still some bytes remaining at the end of the image, smaller than the chunk // size, just diff directly and send if needed. We could combine this with the last delta if // we ended in the active state. - if(bytesRemain > 0 && memcmp(src, dst, bytesRemain)) + if(bytesRemain > 0 && memcmp(src, dst, bytesRemain) != 0) { deltasList.push_back(DeltaSection()); deltasList.back().offs = src - srcBegin; @@ -2378,7 +2378,7 @@ void ReplayProxy::InitPreviewWindow() if(data.system != WindowingSystem::Unknown) { // if the data has changed, destroy the old window so we'll recreate - if(m_PreviewWindow == 0 || memcmp(&m_PreviewWindowingData, &data, sizeof(data))) + if(m_PreviewWindow == 0 || memcmp(&m_PreviewWindowingData, &data, sizeof(data)) != 0) { if(m_PreviewWindow) { diff --git a/renderdoc/driver/d3d11/d3d11_manager.h b/renderdoc/driver/d3d11/d3d11_manager.h index d0d571d37..4f040d2e1 100644 --- a/renderdoc/driver/d3d11/d3d11_manager.h +++ b/renderdoc/driver/d3d11/d3d11_manager.h @@ -210,10 +210,10 @@ private: bool Verify() { - if(ptr[0] && memcmp(ptr[0] + size, markerValue, sizeof(markerValue))) + if(ptr[0] && memcmp(ptr[0] + size, markerValue, sizeof(markerValue)) != 0) return false; - if(ptr[1] && memcmp(ptr[1] + size, markerValue, sizeof(markerValue))) + if(ptr[1] && memcmp(ptr[1] + size, markerValue, sizeof(markerValue)) != 0) return false; return true; diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 45a297a59..b3e8912f6 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -1567,7 +1567,7 @@ rdcarray D3D11Replay::GetPassEvents(uint32_t eventId) { const DrawcallDescription *prev = start->previous; - if(memcmp(start->outputs, prev->outputs, sizeof(start->outputs)) || + if(memcmp(start->outputs, prev->outputs, sizeof(start->outputs)) != 0 || start->depthOut != prev->depthOut) break; diff --git a/renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp index 43d9e5c93..0962886cf 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_command_list4_wrap.cpp @@ -123,7 +123,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_BeginRenderPass( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR) flags |= D3D12_CLEAR_FLAG_STENCIL; - if(flags) + if(flags != 0) { // we can safely read from either depth/stencil clear values because if the access // type isn't clear the corresponding flag will be unset - so whatever garbage value @@ -199,7 +199,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_BeginRenderPass( if(pDepthStencil->StencilBeginningAccess.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR) flags |= D3D12_CLEAR_FLAG_STENCIL; - if(flags) + if(flags != 0) { // we can safely read from either depth/stencil clear values because if the access // type isn't clear the corresponding flag will be unset - so whatever garbage value diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index ce3959bab..9a4872c88 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -594,12 +594,12 @@ rdcstr D3D12Replay::DisassembleShader(ResourceId pipeline, const ShaderReflectio idx += 11; // stage=".S"> - if(strncmp(contents.c_str() + idx, "", 9)) + if(strncmp(contents.c_str() + idx, "", 9) != 0) return "; Unknown error fetching disassembly, invalid string returned\n\n\n" + contents; idx += 9; // - if(strncmp(contents.c_str() + idx, " D3D12Replay::GetPassEvents(uint32_t eventId) // if we've come to the start of the log we were outside of a list // to start with - if(start->previous == 0) + if(start->previous == NULL) return passEvents; // step back const DrawcallDescription *prev = start->previous; - // something went wrong, start->previous was non-zero but we didn't - // get a draw. Abort - if(!prev) - return passEvents; - // if the outputs changed, we're done - if(memcmp(start->outputs, prev->outputs, sizeof(start->outputs)) || + if(memcmp(start->outputs, prev->outputs, sizeof(start->outputs)) != 0 || start->depthOut != prev->depthOut) break; diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index 9609b3d12..f7c31257d 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -629,7 +629,7 @@ void DoVendorChecks(GLPlatform &platform, GLWindowingData context) RDCCOMPILE_ASSERT(sizeof(buf) == sizeof(buf), "Buffers are not matching sizes"); - if(memcmp(buf, cmp, sizeof(buf))) + if(memcmp(buf, cmp, sizeof(buf)) != 0) { RDCERR("glGetTexImage from the source texture returns incorrect data!"); VendorCheck[VendorCheck_AMD_copy_compressed_cubemaps] = @@ -647,7 +647,7 @@ void DoVendorChecks(GLPlatform &platform, GLWindowingData context) RDCCOMPILE_ASSERT(sizeof(buf) == sizeof(buf), "Buffers are not matching sizes"); - if(memcmp(buf, cmp, sizeof(buf))) + if(memcmp(buf, cmp, sizeof(buf)) != 0) { RDCWARN("Using hack to avoid glCopyImageSubData on cubemap textures"); VendorCheck[VendorCheck_AMD_copy_compressed_cubemaps] = true; @@ -1451,7 +1451,7 @@ void ClearGLErrors() { int i = 0; GLenum err = GL.glGetError(); - while(err) + while(err != eGL_NONE) { err = GL.glGetError(); i++; diff --git a/renderdoc/driver/gl/gl_counters.cpp b/renderdoc/driver/gl/gl_counters.cpp index 115a4c4a9..8c4253ef5 100644 --- a/renderdoc/driver/gl/gl_counters.cpp +++ b/renderdoc/driver/gl/gl_counters.cpp @@ -266,7 +266,7 @@ void GLReplay::FillTimers(GLCounterContext &ctx, const DrawcallDescription &draw for(uint32_t c = 0; c < counters.size(); c++) { m_pDriver->glGenQueries(1, &queries->obj[(uint32_t)counters[c]]); - if(m_pDriver->glGetError()) + if(m_pDriver->glGetError() != eGL_NONE) queries->obj[(uint32_t)counters[c]] = 0; } } @@ -281,7 +281,7 @@ void GLReplay::FillTimers(GLCounterContext &ctx, const DrawcallDescription &draw if(queries->obj[q]) { m_pDriver->glBeginQuery(glCounters[q], queries->obj[q]); - if(m_pDriver->glGetError()) + if(m_pDriver->glGetError() != eGL_NONE) { m_pDriver->glDeleteQueries(1, &queries->obj[q]); queries->obj[q] = 0; @@ -540,7 +540,7 @@ rdcarray GLReplay::FetchCounters(const rdcarray &allC double duration = double(data) * nanosToSecs; - if(m_pDriver->glGetError()) + if(m_pDriver->glGetError() != eGL_NONE) { data = (uint64_t)-1; duration = -1; diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index a90698ae5..efc8d21b3 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -115,7 +115,7 @@ rdcarray GLReplay::GetPassEvents(uint32_t eventId) { const DrawcallDescription *prev = start->previous; - if(memcmp(start->outputs, prev->outputs, sizeof(start->outputs)) || + if(memcmp(start->outputs, prev->outputs, sizeof(start->outputs)) != 0 || start->depthOut != prev->depthOut) break; diff --git a/renderdoc/driver/gl/gl_resources.h b/renderdoc/driver/gl/gl_resources.h index 59e2a8d1d..09edb2535 100644 --- a/renderdoc/driver/gl/gl_resources.h +++ b/renderdoc/driver/gl/gl_resources.h @@ -289,10 +289,10 @@ struct GLResourceRecord : public ResourceRecord bool VerifyShadowStorage() { - if(ShadowPtr[0] && memcmp(ShadowPtr[0] + ShadowSize, markerValue, sizeof(markerValue))) + if(ShadowPtr[0] && memcmp(ShadowPtr[0] + ShadowSize, markerValue, sizeof(markerValue)) != 0) return false; - if(ShadowPtr[1] && memcmp(ShadowPtr[1] + ShadowSize, markerValue, sizeof(markerValue))) + if(ShadowPtr[1] && memcmp(ShadowPtr[1] + ShadowSize, markerValue, sizeof(markerValue)) != 0) return false; return true; diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index a37261a50..90b6e2fc4 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -1055,7 +1055,7 @@ void MakeChildByteOffsetsRelative(ShaderConstant &member) int ParseVersionStatement(const char *version) { - if(strncmp(version, "#version", 8)) + if(strncmp(version, "#version", 8) != 0) return 0; version += 8; diff --git a/renderdoc/driver/gl/wgl_hooks.cpp b/renderdoc/driver/gl/wgl_hooks.cpp index 1c8df263e..0bfde2c7e 100644 --- a/renderdoc/driver/gl/wgl_hooks.cpp +++ b/renderdoc/driver/gl/wgl_hooks.cpp @@ -584,7 +584,7 @@ static PROC WINAPI wglGetProcAddress_hooked(const char *func) // assume wgl functions are safe to just pass straight through, but don't pass through the wgl DX // interop functions - if(!strncmp(func, "wgl", 3) && strncmp(func, "wglDX", 5)) + if(strncmp(func, "wgl", 3) == 0 && strncmp(func, "wglDX", 5) != 0) return realFunc; // otherwise, consult our database of hooks diff --git a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp index 26c3181fc..41e7ecacc 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp @@ -1254,7 +1254,7 @@ DXBCContainer::DXBCContainer(const void *ByteCode, size_t ByteCodeLength) continue; } - if(c + 5 > end || strncmp(c, "#line", 5)) + if(c + 5 > end || strncmp(c, "#line", 5) != 0) { // resize up to account for the current line, if necessary dstFile->resize(RDCMAX(dstLine + 1, dstFile->size())); diff --git a/renderdoc/driver/shaders/dxbc/dxbc_disassemble.cpp b/renderdoc/driver/shaders/dxbc/dxbc_disassemble.cpp index 0c4a7be74..91efde9e0 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_disassemble.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_disassemble.cpp @@ -265,7 +265,7 @@ bool Operand::operator==(const Operand &o) const return false; if(numComponents != o.numComponents) return false; - if(memcmp(comps, o.comps, 4)) + if(memcmp(comps, o.comps, 4) != 0) return false; if(modifier != o.modifier) return false; diff --git a/renderdoc/driver/shaders/dxbc/dxbc_spdb.cpp b/renderdoc/driver/shaders/dxbc/dxbc_spdb.cpp index b133e345a..aa4cd8e3c 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_spdb.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_spdb.cpp @@ -64,7 +64,8 @@ SPDBChunk::SPDBChunk(Reflection *reflection, void *chunk) FileHeaderPage *header = (FileHeaderPage *)data; - if(memcmp(header->identifier, "Microsoft C/C++ MSF 7.00\r\n\032DS\0\0", sizeof(header->identifier))) + if(memcmp(header->identifier, "Microsoft C/C++ MSF 7.00\r\n\032DS\0\0", + sizeof(header->identifier)) != 0) { RDCWARN("Unexpected SPDB type"); return; diff --git a/renderdoc/driver/vulkan/vk_info.cpp b/renderdoc/driver/vulkan/vk_info.cpp index 130ee4257..87aa48efb 100644 --- a/renderdoc/driver/vulkan/vk_info.cpp +++ b/renderdoc/driver/vulkan/vk_info.cpp @@ -1069,7 +1069,7 @@ void VulkanCreationInfo::ShaderModule::Init(VulkanResourceManager *resourceMan, const VkShaderModuleCreateInfo *pCreateInfo) { const uint32_t SPIRVMagic = 0x07230203; - if(pCreateInfo->codeSize < 4 || memcmp(pCreateInfo->pCode, &SPIRVMagic, sizeof(SPIRVMagic))) + if(pCreateInfo->codeSize < 4 || memcmp(pCreateInfo->pCode, &SPIRVMagic, sizeof(SPIRVMagic)) != 0) { RDCWARN("Shader not provided with SPIR-V"); } diff --git a/renderdoc/driver/vulkan/vk_layer.cpp b/renderdoc/driver/vulkan/vk_layer.cpp index 03dd8cecf..9ccf762bd 100644 --- a/renderdoc/driver/vulkan/vk_layer.cpp +++ b/renderdoc/driver/vulkan/vk_layer.cpp @@ -251,7 +251,8 @@ VK_LAYER_RENDERDOC_CaptureEnumerateDeviceExtensionProperties(VkPhysicalDevice ph { // if pLayerName is NULL or not ours we're calling down through the layer chain to the ICD. // This is our chance to filter out any reported extensions that we don't support - if(physicalDevice != NULL && (pLayerName == NULL || strcmp(pLayerName, RENDERDOC_VULKAN_LAYER_NAME))) + if(physicalDevice != NULL && + (pLayerName == NULL || strcmp(pLayerName, RENDERDOC_VULKAN_LAYER_NAME) != 0)) return CoreDisp(physicalDevice) ->FilterDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties); diff --git a/renderdoc/driver/vulkan/vk_postvs.cpp b/renderdoc/driver/vulkan/vk_postvs.cpp index cd1c2dbf0..138bd1d21 100644 --- a/renderdoc/driver/vulkan/vk_postvs.cpp +++ b/renderdoc/driver/vulkan/vk_postvs.cpp @@ -1342,7 +1342,7 @@ void VulkanReplay::PatchReservedDescriptors(const VulkanStatePipeline &pipe, // Instead of trying to remap offsets to match, we simply make every binding compute // visible so the ordering is still the same. Since compute and graphics are disjoint this // is safe. - if(patchedBindingStage) + if(patchedBindingStage != 0) newBind.stageFlags = patchedBindingStage; else newBind.stageFlags = bind.stageFlags; diff --git a/renderdoc/os/win32/win32_callstack.cpp b/renderdoc/os/win32/win32_callstack.cpp index 2040bfc54..2a5915971 100644 --- a/renderdoc/os/win32/win32_callstack.cpp +++ b/renderdoc/os/win32/win32_callstack.cpp @@ -1097,7 +1097,7 @@ Stackwalk *Create() StackResolver *MakeResolver(bool interactive, byte *moduleDB, size_t DBSize, RENDERDOC_ProgressCallback progress) { - if(DBSize < 8 || memcmp(moduleDB, "WN32CALL", 8)) + if(DBSize < 8 || memcmp(moduleDB, "WN32CALL", 8) != 0) { RDCWARN("Can't load callstack resolve for this log. Possibly from another platform?"); return NULL; diff --git a/renderdoc/os/win32/win32_shellext.cpp b/renderdoc/os/win32/win32_shellext.cpp index babda0636..758bf0c21 100644 --- a/renderdoc/os/win32/win32_shellext.cpp +++ b/renderdoc/os/win32/win32_shellext.cpp @@ -156,7 +156,7 @@ struct RDCThumbnailProvider : public IThumbnailProvider, IInitializeWithStream byte *readEnd = readPtr + captureHeader.size(); if(captureHeader.size() < sizeof(MAGIC_HEADER) || - memcmp(&MAGIC_HEADER, readPtr, sizeof(MAGIC_HEADER))) + memcmp(&MAGIC_HEADER, readPtr, sizeof(MAGIC_HEADER)) != 0) { RDCDEBUG("Legacy header did not have expected magic number"); return; diff --git a/renderdoc/replay/capture_file.cpp b/renderdoc/replay/capture_file.cpp index 1f62ccf62..9c1d4a69b 100644 --- a/renderdoc/replay/capture_file.cpp +++ b/renderdoc/replay/capture_file.cpp @@ -221,7 +221,7 @@ ReplayStatus CaptureFile::OpenFile(const char *filename, const char *filetype, } else { - if(filetype != NULL && strcmp(filetype, "") && strcmp(filetype, "rdc")) + if(filetype != NULL && strcmp(filetype, "") != 0 && strcmp(filetype, "rdc") != 0) RDCWARN("Opening file with unrecognised filetype '%s' - treating as 'rdc'", filetype); if(progress) @@ -262,7 +262,7 @@ ReplayStatus CaptureFile::OpenBuffer(const bytebuf &buffer, const char *filetype } else { - if(filetype != NULL && strcmp(filetype, "") && strcmp(filetype, "rdc")) + if(filetype != NULL && strcmp(filetype, "") != 0 && strcmp(filetype, "rdc") != 0) RDCWARN("Opening file with unrecognised filetype '%s' - treating as 'rdc'", filetype); if(progress) @@ -438,7 +438,7 @@ ReplayStatus CaptureFile::Convert(const char *filename, const char *filetype, co } } - if(filetype != NULL && strcmp(filetype, "") && strcmp(filetype, "rdc")) + if(filetype != NULL && strcmp(filetype, "") != 0 && strcmp(filetype, "rdc") != 0) RDCWARN("Converting file to unrecognised filetype '%s' - treating as 'rdc'", filetype); RDCFile output; diff --git a/renderdoc/serialise/codecs/xml_codec.cpp b/renderdoc/serialise/codecs/xml_codec.cpp index d1af1e3c9..265df8870 100644 --- a/renderdoc/serialise/codecs/xml_codec.cpp +++ b/renderdoc/serialise/codecs/xml_codec.cpp @@ -564,7 +564,7 @@ static ReplayStatus XML2Structured(const char *xml, const ThumbTypeAndData &thum pugi::xml_node xHeader = root.first_child(); - if(strcmp(xHeader.name(), "header")) + if(strcmp(xHeader.name(), "header") != 0) { RDCERR("Malformed document, expected header node"); return ReplayStatus::FileCorrupted; @@ -574,7 +574,7 @@ static ReplayStatus XML2Structured(const char *xml, const ThumbTypeAndData &thum { pugi::xml_node xDriver = xHeader.first_child(); - if(strcmp(xDriver.name(), "driver")) + if(strcmp(xDriver.name(), "driver") != 0) { RDCERR("Malformed document, expected driver node"); return ReplayStatus::FileCorrupted; @@ -589,7 +589,7 @@ static ReplayStatus XML2Structured(const char *xml, const ThumbTypeAndData &thum pugi::xml_node xThumbnail = xIdent.next_sibling(); - if(strcmp(xThumbnail.name(), "thumbnail")) + if(strcmp(xThumbnail.name(), "thumbnail") != 0) { RDCERR("Malformed document, expected driver node"); return ReplayStatus::FileCorrupted; @@ -714,7 +714,7 @@ static ReplayStatus XML2Structured(const char *xml, const ThumbTypeAndData &thum pugi::xml_node xChunks = xSection; - if(strcmp(xSection.name(), "chunks")) + if(strcmp(xSection.name(), "chunks") != 0) { RDCERR("Malformed document, expected chunks node"); return ReplayStatus::FileCorrupted; @@ -733,7 +733,7 @@ static ReplayStatus XML2Structured(const char *xml, const ThumbTypeAndData &thum for(pugi::xml_node xChunk = xChunks.first_child(); xChunk; xChunk = xChunk.next_sibling()) { - if(strcmp(xChunk.name(), "chunk")) + if(strcmp(xChunk.name(), "chunk") != 0) return ReplayStatus::FileCorrupted; SDChunk *chunk = new SDChunk(xChunk.attribute("name").as_string());