Safer file loading, better showing of fatal errors (drop out of double buffering)

This commit is contained in:
stevenhowes
2021-04-03 22:30:49 +01:00
parent cd49a33a46
commit 151a4d859c
3 changed files with 12 additions and 1 deletions
Binary file not shown.
+5 -1
View File
@@ -12,6 +12,7 @@ extern unsigned char *tilebuffer;
int screen = 1;
extern void screen_nobuffer();
// Loads sprite file into buffer
void load_sprites(char* filename, unsigned char **buffername)
{
@@ -34,7 +35,8 @@ void load_sprites(char* filename, unsigned char **buffername)
// Stops us trying to mallocsomething mad if file is too big.
if(length > 200000)
{
{
screen_nobuffer();
printf("Sprite file %s seems unreasonably large at %i bytes",filename, length);
exit(0);
}
@@ -44,6 +46,7 @@ void load_sprites(char* filename, unsigned char **buffername)
if(buffername==NULL)
{
screen_nobuffer();
printf("Couldn't malloc %i bytes for sprite buffer",length);
exit(0);
}
@@ -85,6 +88,7 @@ void display_mode(int mode)
inreg.r[1] = (pitch * height * 2) - outreg.r[1];
if (_kernel_swi(OS_ChangeDynamicArea, &inreg, &outreg) != NULL)
{
screen_nobuffer();
printf("Couldn't OS_ChangeDynamicArea");
exit(0);
}
+7
View File
@@ -46,6 +46,13 @@ void game2_loadmap(char* filename)
// Length will be in R4 if it exists
length = outreg.r[4];
if(length > sizeof(map[0]))
{
screen_nobuffer();
printf("Map exceeds %d bytes (%d bytes)",sizeof(map[0]),length);
exit(0);
}
// Attempt to get file info
inreg.r[0] = 16;
inreg.r[1] = (int) filename;