Test_PAL/Load_PAL: replace fread() by Read_bytes()

This commit is contained in:
Thomas Bernard 2018-03-15 13:40:14 +01:00
parent 531cda58b6
commit 3e82bd0649

View File

@ -62,11 +62,12 @@ void Test_PAL(T_IO_Context * context, FILE * file)
// header at all, so we check for the file size.
if (file_size == sizeof(T_Palette))
File_error = 0;
else
else if (file_size > 8)
{
// Bigger (or smaller ?) files may be in other formats. These have an
// header, so look for it.
fread(buffer, 1, 8, file);
if (!Read_bytes(file, buffer, 8))
return;
if (strncmp(buffer,"JASC-PAL",8) == 0)
{
// JASC file format, used by Paint Shop Pro and GIMP. This is also the
@ -79,7 +80,8 @@ void Test_PAL(T_IO_Context * context, FILE * file)
// This is a data container (similar to IFF). We only check the first
// chunk header, and give up if that's not a palette.
fseek(file, 8, SEEK_SET);
fread(buffer, 1, 8, file);
if (!Read_bytes(file, buffer, 8))
return;
if (strncmp(buffer, "PAL data", 8) == 0)
{
File_error = 0;
@ -263,7 +265,12 @@ void Load_PAL(T_IO_Context * context)
File_error = 2;
} else {
char buffer[16];
fread(buffer, 1, 8, file);
if (!Read_bytes(file, buffer, 8))
{
File_error = 2;
fclose(file);
return;
}
buffer[8] = '\0';
if (strncmp(buffer,"JASC-PAL",8) == 0)
{
@ -289,22 +296,25 @@ void Load_PAL(T_IO_Context * context)
{
// Microsoft RIFF format.
fseek(file, 8, SEEK_SET);
fread(buffer, 1, 8, file);
Read_bytes(file, buffer, 8);
if (strncmp(buffer, "PAL data", 8) == 0)
{
word color_count;
word i = 0;
fseek(file, 22, SEEK_SET);
Read_word_le(file, &color_count);
for(i = 0; i < color_count; i++)
if (!Read_word_le(file, &color_count))
File_error = 2;
else
for(i = 0; i < color_count && File_error == 0; i++)
{
Read_bytes(file, buffer, 4);
context->Palette[i].R = buffer[0];
context->Palette[i].G = buffer[1];
context->Palette[i].B = buffer[2];
byte colors[4];
if (!Read_bytes(file, colors, 4))
File_error = 2;
context->Palette[i].R = colors[0];
context->Palette[i].G = colors[1];
context->Palette[i].B = colors[2];
}
} else File_error = 2;
} else
File_error = 2;