File: 05_fix-missing-roms-crash.patch

package info (click to toggle)
fuse-emulator 1.0.0.1a%2Bdfsg1-4
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 9,568 kB
  • sloc: ansic: 67,895; sh: 10,265; perl: 3,386; makefile: 787; yacc: 227; lex: 139
file content (111 lines) | stat: -rw-r--r-- 3,798 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
From: Alberto Garcia <agarcia@igalia.com>
Subject: Don't crash if ROM files are unavailable
Applied-Upstream: http://fuse-emulator.svn.sourceforge.net/viewvc/fuse-emulator?view=revision&revision=4234
Index: fuse-emulator/disk/beta.c
===================================================================
--- fuse-emulator.orig/disk/beta.c
+++ fuse-emulator/disk/beta.c
@@ -205,9 +205,15 @@ beta_reset( int hard_reset GCC_UNUSED )
   }
 
   if( !beta_builtin ) {
-    machine_load_rom_bank( beta_memory_map_romcs, 0, 0,
-			   settings_current.rom_beta128,
-			   settings_default.rom_beta128, 0x4000 );
+    if( machine_load_rom_bank( beta_memory_map_romcs, 0, 0,
+			       settings_current.rom_beta128,
+			       settings_default.rom_beta128, 0x4000 ) ) {
+      beta_active = 0;
+      beta_available = 0;
+      periph_beta128_active = 0;
+      settings_current.beta128 = 0;
+      return;
+    }
 
     beta_memory_map_romcs[ 0 ].writable = 0;
     beta_memory_map_romcs[ 1 ].writable = 0;
Index: fuse-emulator/disk/opus.c
===================================================================
--- fuse-emulator.orig/disk/opus.c
+++ fuse-emulator/disk/opus.c
@@ -162,9 +162,13 @@ opus_reset( int hard_reset )
   if( !periph_opus_active )
     return;
 
-  machine_load_rom_bank( opus_memory_map_romcs, 0, 0,
-			 settings_current.rom_opus,
-			 settings_default.rom_opus, 0x2000 );
+  if( machine_load_rom_bank( opus_memory_map_romcs, 0, 0,
+                             settings_current.rom_opus,
+                             settings_default.rom_opus, 0x2000 ) ) {
+    settings_current.opus = 0;
+    periph_opus_active = 0;
+    return;
+  }
 
   opus_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL;
 
Index: fuse-emulator/disk/plusd.c
===================================================================
--- fuse-emulator.orig/disk/plusd.c
+++ fuse-emulator/disk/plusd.c
@@ -174,9 +174,13 @@ plusd_reset( int hard_reset )
   if( !periph_plusd_active )
     return;
 
-  machine_load_rom_bank( plusd_memory_map_romcs, 0, 0,
-			 settings_current.rom_plusd,
-			 settings_default.rom_plusd, 0x2000 );
+  if( machine_load_rom_bank( plusd_memory_map_romcs, 0, 0,
+			     settings_current.rom_plusd,
+			     settings_default.rom_plusd, 0x2000 ) ) {
+    settings_current.plusd = 0;
+    periph_plusd_active = 0;
+    return;
+  }
 
   plusd_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL;
 
Index: fuse-emulator/if1.c
===================================================================
--- fuse-emulator.orig/if1.c
+++ fuse-emulator/if1.c
@@ -364,10 +364,14 @@ if1_reset( int hard_reset GCC_UNUSED )
 
   if( !periph_interface1_active ) return;
 
-  machine_load_rom_bank( if1_memory_map_romcs, 0, 0,
-			 settings_current.rom_interface_i,
-			 settings_default.rom_interface_i,
-			 MEMORY_PAGE_SIZE );
+  if( machine_load_rom_bank( if1_memory_map_romcs, 0, 0,
+			     settings_current.rom_interface_i,
+			     settings_default.rom_interface_i,
+			     MEMORY_PAGE_SIZE ) ) {
+    settings_current.interface1 = 0;
+    periph_interface1_active = 0;
+    return;
+  }
 
   if1_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL;
 
Index: fuse-emulator/if2.c
===================================================================
--- fuse-emulator.orig/if2.c
+++ fuse-emulator/if2.c
@@ -121,10 +121,11 @@ if2_reset( int hard_reset GCC_UNUSED )
 
   if ( !periph_interface2_active ) return;
 
-  machine_load_rom_bank( if2_memory_map_romcs, 0, 0,
-			 settings_current.if2_file,
-			 NULL,
-			 2 * MEMORY_PAGE_SIZE );
+  if ( machine_load_rom_bank( if2_memory_map_romcs, 0, 0,
+			      settings_current.if2_file,
+			      NULL,
+			      2 * MEMORY_PAGE_SIZE ) )
+    return;
 
   if2_memory_map_romcs[0].source =
     if2_memory_map_romcs[1].source = MEMORY_SOURCE_CARTRIDGE;