Core/ResourceLoader: Fix stream reset in case of error

This commit is contained in:
Jérôme Leclercq 2021-05-24 19:11:10 +02:00
parent cce32a64d4
commit f0192c3b98
1 changed files with 9 additions and 8 deletions

View File

@ -180,6 +180,7 @@ namespace Nz
MemoryView stream(data, size); MemoryView stream(data, size);
UInt64 streamPos = stream.GetCursorPos();
bool found = false; bool found = false;
for (auto& loaderPtr : m_loaders) for (auto& loaderPtr : m_loaders)
{ {
@ -190,7 +191,7 @@ namespace Nz
{ {
if (loader.streamChecker) if (loader.streamChecker)
{ {
stream.SetCursorPos(0); stream.SetCursorPos(streamPos);
recognized = loader.streamChecker(stream, parameters); recognized = loader.streamChecker(stream, parameters);
if (recognized == Ternary::False) if (recognized == Ternary::False)
@ -210,7 +211,7 @@ namespace Nz
} }
else else
{ {
stream.SetCursorPos(0); stream.SetCursorPos(streamPos);
recognized = loader.streamChecker(stream, parameters); recognized = loader.streamChecker(stream, parameters);
if (recognized == Ternary::False) if (recognized == Ternary::False)
@ -218,7 +219,7 @@ namespace Nz
else if (recognized == Ternary::True) else if (recognized == Ternary::True)
found = true; found = true;
stream.SetCursorPos(0); stream.SetCursorPos(streamPos);
std::shared_ptr<Type> resource = loader.streamLoader(stream, parameters); std::shared_ptr<Type> resource = loader.streamLoader(stream, parameters);
if (resource) if (resource)
@ -293,12 +294,12 @@ namespace Nz
} }
/*! /*!
* \brief Registers the loader * \brief Registers a loader
* \return A pointer to the registered Load which can be unsed to unregister it later * \return A pointer to the registered Entry which can be unsed to unregister it later
* *
* \param loader A collection of loader callbacks that will be registered * \param loader A collection of loader callbacks that will be registered
* *
* \seealso UnregisterLoader * \see UnregisterLoader
*/ */
template<typename Type, typename Parameters> template<typename Type, typename Parameters>
auto ResourceLoader<Type, Parameters>::RegisterLoader(Entry loader) -> const Entry* auto ResourceLoader<Type, Parameters>::RegisterLoader(Entry loader) -> const Entry*
@ -311,11 +312,11 @@ namespace Nz
} }
/*! /*!
* \brief Unregisters the loader * \brief Unregisters a loader
* *
* \param loader A pointer to a loader returned by RegisterLoad * \param loader A pointer to a loader returned by RegisterLoad
* *
* \seealso RegisterLoader * \see RegisterLoader
*/ */
template<typename Type, typename Parameters> template<typename Type, typename Parameters>
void ResourceLoader<Type, Parameters>::UnregisterLoader(const Entry* loader) void ResourceLoader<Type, Parameters>::UnregisterLoader(const Entry* loader)