summaryrefslogtreecommitdiff
path: root/apps/plugins/midi/midifile.c
diff options
context:
space:
mode:
authorStepan Moskovchenko <stevenm@rockbox.org>2006-05-03 05:18:18 +0000
committerStepan Moskovchenko <stevenm@rockbox.org>2006-05-03 05:18:18 +0000
commit47efba8bbfd17cb6d95ce1039e0114dc24a9dc68 (patch)
tree4d42a46b6c0d66d7b53ec82dfc7a0ce826b5ba98 /apps/plugins/midi/midifile.c
parent224b0bf1ffe3d5ec0f61dd2df20c13c48d1644b4 (diff)
downloadrockbox-47efba8bbfd17cb6d95ce1039e0114dc24a9dc68.tar.gz
rockbox-47efba8bbfd17cb6d95ce1039e0114dc24a9dc68.zip
Fix file descriptor leak that would cause a hard lockup every 7 files
played. A few other cosmetic changes. please, please no red build =) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9865 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/midi/midifile.c')
-rw-r--r--apps/plugins/midi/midifile.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/apps/plugins/midi/midifile.c b/apps/plugins/midi/midifile.c
index 61168f9d39..13887e4a98 100644
--- a/apps/plugins/midi/midifile.c
+++ b/apps/plugins/midi/midifile.c
@@ -67,7 +67,8 @@ struct MIDIfile * loadFile(char * filename)
67 67
68 int track=0; 68 int track=0;
69 69
70 printf("\nnumTracks=%d div=%d\nBegin reading track data\n", mfload->numTracks, mfload->div); 70 printf("\nFile has %d tracks.", mfload->numTracks);
71 printf("Time division=%d\n", mfload->div);
71 72
72 73
73 while(! eof(file) && track < mfload->numTracks) 74 while(! eof(file) && track < mfload->numTracks)
@@ -79,7 +80,7 @@ struct MIDIfile * loadFile(char * filename)
79 { 80 {
80 if(mfload->numTracks != track) 81 if(mfload->numTracks != track)
81 { 82 {
82 printf("\nError: file claims to have %d tracks.\n I only see %d here.\n", mfload->numTracks, track); 83 printf("\nError: file claims to have %d tracks.\n I only see %d here.\n", mfload->numTracks, track);
83 mfload->numTracks = track; 84 mfload->numTracks = track;
84 } 85 }
85 return mfload; 86 return mfload;
@@ -88,7 +89,6 @@ struct MIDIfile * loadFile(char * filename)
88 if(id == ID_MTRK) 89 if(id == ID_MTRK)
89 { 90 {
90 mfload->tracks[track] = readTrack(file); 91 mfload->tracks[track] = readTrack(file);
91 //exit(0);
92 track++; 92 track++;
93 } else 93 } else
94 { 94 {
@@ -98,16 +98,19 @@ struct MIDIfile * loadFile(char * filename)
98 readChar(file); 98 readChar(file);
99 } 99 }
100 } 100 }
101
102 rb->close(file);
101 return mfload; 103 return mfload;
102 104
103} 105}
104 106
107/* Global again. Not static. What if track 1 ends on a running status event
108 * and then track 2 starts loading */
105 109
110int rStatus = 0;
106/* Returns 0 if done, 1 if keep going */ 111/* Returns 0 if done, 1 if keep going */
107int readEvent(int file, void * dest) 112int readEvent(int file, void * dest)
108{ 113{
109
110 static int rStatus = 0;
111 struct Event dummy; 114 struct Event dummy;
112 struct Event * ev = (struct Event *) dest; 115 struct Event * ev = (struct Event *) dest;
113 116
@@ -136,7 +139,7 @@ int readEvent(int file, void * dest)
136 else 139 else
137 { 140 {
138 /* 141 /*
139 * Don't allocate anything, just see how much it would tale 142 * Don't allocate anything, just see how much it would take
140 * To make memory usage efficient 143 * To make memory usage efficient
141 */ 144 */
142 unsigned int a=0; 145 unsigned int a=0;
@@ -201,7 +204,7 @@ struct Track * readTrack(int file)
201 { 204 {
202 if(trackSize < dataPtr-trk->dataBlock) 205 if(trackSize < dataPtr-trk->dataBlock)
203 { 206 {
204 printf("\nTrack parser memory out of bounds"); 207 printf("\nTrack parser memory out of bounds");
205 exit(1); 208 exit(1);
206 } 209 }
207 dataPtr+=sizeof(struct Event); 210 dataPtr+=sizeof(struct Event);