33#include " appdefs.h"
44#include < cstdio>
55#include < algorithm>
6+ #include < memory>
67
78Ghost::Ghost (bool frames) {
89 m_version = 104 ;
@@ -21,27 +22,26 @@ bool Ghost::load(int track, int reverse) {
2122 m_reverse = reverse;
2223 char filename[1024 ];
2324 getfname (filename);
24- FILE* fin = fopenDir (filename, " rb" , OPENMRAC_ORG, OPENMRAC_APP);
25- if (fin == NULL ) return false ;
26- if (fread (&m_version, sizeof (int ), 1 , fin) != 1 ) { fclose (fin); return false ;}
27- if (m_version != 104 ) { fclose (fin); return false ;}
28- if (fread (&m_track, sizeof (int ), 1 , fin) != 1 ) { fclose (fin); return false ;}
29- if (m_track != track) { fclose (fin); return false ;}
30- if (fread (&m_reverse, sizeof (int ), 1 , fin) != 1 ) { fclose (fin); return false ;}
31- if (m_reverse != reverse) { fclose (fin); return false ;}
32- if (fread (&m_car, sizeof (int ), 1 , fin) != 1 ) { fclose (fin); return false ;}
33- if (m_car < 0 || m_car >= 3 ) { fclose (fin); return false ;}
34- if (fread (&m_carcolor, sizeof (int ), 1 , fin) != 1 ) { fclose (fin); return false ;}
35- if (m_carcolor < 0 || m_carcolor >= 4 ) { fclose (fin); return false ;}
36- if (fread (&m_seconds, sizeof (float ), 1 , fin) != 1 ) { fclose (fin); return false ;}
37- if (m_seconds < 10.0 || m_seconds > 31536000.0 ) { fclose (fin); return false ;}
25+ std::unique_ptr< FILE, decltype (&fclose)> fin ( fopenDir (filename, " rb" , OPENMRAC_ORG, OPENMRAC_APP), &fclose );
26+ if (fin. get () == nullptr ) return false ;
27+ if (fread (&m_version, sizeof (int ), 1 , fin. get ()) != 1 ) return false ;
28+ if (m_version != 104 ) return false ;
29+ if (fread (&m_track, sizeof (int ), 1 , fin. get ()) != 1 ) return false ;
30+ if (m_track != track) return false ;
31+ if (fread (&m_reverse, sizeof (int ), 1 , fin. get ()) != 1 ) return false ;
32+ if (m_reverse != reverse) return false ;
33+ if (fread (&m_car, sizeof (int ), 1 , fin. get ()) != 1 ) return false ;
34+ if (m_car < 0 || m_car >= 3 ) return false ;
35+ if (fread (&m_carcolor, sizeof (int ), 1 , fin. get ()) != 1 ) return false ;
36+ if (m_carcolor < 0 || m_carcolor >= 4 ) return false ;
37+ if (fread (&m_seconds, sizeof (float ), 1 , fin. get ()) != 1 ) return false ;
38+ if (m_seconds < 10.0 || m_seconds > 31536000.0 ) return false ;
3839 if (!m_frames.empty ())
3940 {
40- if (fread (&m_num, sizeof (int ), 1 , fin) != 1 ) { fclose (fin); return false ;}
41- if (m_num < 0 || m_num > m_maxnum) { fclose (fin); return false ;}
42- if (static_cast <int >(fread (m_frames.data (), sizeof (float )*4 , m_num, fin)) != m_num) { fclose (fin); return false ;}
41+ if (fread (&m_num, sizeof (int ), 1 , fin. get ()) != 1 ) return false ;
42+ if (m_num < 0 || m_num > m_maxnum) return false ;
43+ if (static_cast <int >(fread (m_frames.data (), sizeof (float )*4 , m_num, fin. get ())) != m_num) return false ;
4344 }
44- fclose (fin);
4545 return true ;
4646}
4747
0 commit comments