Made PCX Loader exception-safe
Former-commit-id: aca42c27d8daa6b0c5412bd61c5fad3016bcd6d0
This commit is contained in:
parent
780bcf122c
commit
76c19624d8
|
|
@ -9,6 +9,7 @@
|
||||||
#include <Nazara/Core/InputStream.hpp>
|
#include <Nazara/Core/InputStream.hpp>
|
||||||
#include <Nazara/Core/MemoryStream.hpp>
|
#include <Nazara/Core/MemoryStream.hpp>
|
||||||
#include <Nazara/Utility/Image.hpp>
|
#include <Nazara/Utility/Image.hpp>
|
||||||
|
#include <memory>
|
||||||
#include <Nazara/Utility/Debug.hpp>
|
#include <Nazara/Utility/Debug.hpp>
|
||||||
|
|
||||||
// Auteur du loader original : David Henry
|
// Auteur du loader original : David Henry
|
||||||
|
|
@ -149,18 +150,18 @@ namespace
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
nzUInt8* colorIndex = new nzUInt8[width];
|
std::unique_ptr<nzUInt8[]> colorIndex(new nzUInt8[width]);
|
||||||
nzUInt8* line = new nzUInt8[header.bytesPerScanLine];
|
std::unique_ptr<nzUInt8[]> line(new nzUInt8[header.bytesPerScanLine]);
|
||||||
|
|
||||||
for (unsigned int y = 0; y < height; ++y)
|
for (unsigned int y = 0; y < height; ++y)
|
||||||
{
|
{
|
||||||
nzUInt8* ptr = &pixels[y * width * 3];
|
nzUInt8* ptr = &pixels[y * width * 3];
|
||||||
|
|
||||||
std::memset(colorIndex, 0, width);
|
std::memset(colorIndex.get(), 0, width);
|
||||||
|
|
||||||
for (unsigned int c = 0; c < 4; ++c)
|
for (unsigned int c = 0; c < 4; ++c)
|
||||||
{
|
{
|
||||||
nzUInt8* pLine = line;
|
nzUInt8* pLine = line.get();
|
||||||
int bytes = header.bytesPerScanLine;
|
int bytes = header.bytesPerScanLine;
|
||||||
|
|
||||||
/* decode line number y */
|
/* decode line number y */
|
||||||
|
|
@ -171,9 +172,6 @@ namespace
|
||||||
if (!stream.Read(&rle_value, 1))
|
if (!stream.Read(&rle_value, 1))
|
||||||
{
|
{
|
||||||
NazaraError("Failed to read stream (byte " + NzString::Number(stream.GetCursorPos()) + ')');
|
NazaraError("Failed to read stream (byte " + NzString::Number(stream.GetCursorPos()) + ')');
|
||||||
delete[] colorIndex;
|
|
||||||
delete[] line;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,9 +183,6 @@ namespace
|
||||||
if (!stream.Read(&rle_value, 1))
|
if (!stream.Read(&rle_value, 1))
|
||||||
{
|
{
|
||||||
NazaraError("Failed to read stream (byte " + NzString::Number(stream.GetCursorPos()) + ')');
|
NazaraError("Failed to read stream (byte " + NzString::Number(stream.GetCursorPos()) + ')');
|
||||||
delete[] colorIndex;
|
|
||||||
delete[] line;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -214,9 +209,6 @@ namespace
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* release memory */
|
|
||||||
delete[] colorIndex;
|
|
||||||
delete[] line;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue