@@ -12,47 +12,54 @@ public class LibCrypt
1212 {
1313 public static bool CheckSubfile ( string subFilePath )
1414 {
15- // opening .sub
16- FileStream subfile ;
17- try
18- {
19- subfile = File . OpenRead ( subFilePath ) ;
20- }
21- catch
15+ // Check the file exists first
16+ if ( ! File . Exists ( subFilePath ) )
2217 {
23- Console . WriteLine ( $ "Error opening { subFilePath } ") ;
18+ Console . WriteLine ( $ "{ subFilePath } could not be found ") ;
2419 return false ;
2520 }
2621
27- // checking extension
22+ // Check the extension is a subfile
2823 string ext = Path . GetExtension ( subFilePath ) . TrimStart ( '.' ) . ToLowerInvariant ( ) ;
2924 if ( ext != "sub" )
3025 {
3126 Console . WriteLine ( $ "{ ext } : unknown file extension") ;
3227 return false ;
3328 }
34-
35- // filesize
36- long size = subfile . Length ;
37- if ( size % 96 != 0 )
29+
30+ // Open and check the subfile for LibCrypt
31+ try
3832 {
39- Console . WriteLine ( $ "{ subFilePath } : wrong size") ;
33+ using ( FileStream subfile = File . OpenRead ( subFilePath ) )
34+ {
35+ return CheckSubfile ( subfile ) ;
36+ }
37+ }
38+ catch
39+ {
40+ Console . WriteLine ( $ "Error processing { subFilePath } ") ;
4041 return false ;
4142 }
42-
43- return CheckSubfile ( subfile ) ;
4443 }
4544
4645 public static bool CheckSubfile ( Stream subfile )
4746 {
48- // Variables
47+ // Check the length is valid for subfiles
48+ long size = subfile . Length ;
49+ if ( size % 96 != 0 )
50+ {
51+ Console . WriteLine ( $ "Wrong size") ;
52+ return false ;
53+ }
54+
55+ // Persistent values
4956 byte [ ] buffer = new byte [ 16 ] ;
5057 byte [ ] sub = new byte [ 16 ] ;
5158 int tpos = 0 ;
52- uint sector , psectors = 0 ;
53- long size = subfile . Length ;
59+ int modifiedSectors = 0 ;
5460
55- for ( sector = 150 ; sector < ( ( size / 96 ) + 150 ) ; sector ++ )
61+ // Check each sector for modifications
62+ for ( uint sector = 150 ; sector < ( ( size / 96 ) + 150 ) ; sector ++ )
5663 {
5764 subfile . Seek ( 12 , SeekOrigin . Current ) ;
5865 if ( subfile . Read ( buffer , 0 , 12 ) == 0 )
@@ -99,12 +106,12 @@ public static bool CheckSubfile(Stream subfile)
99106 sub [ 11 ] = crcBytes [ 1 ] ;
100107
101108 // TODO: This *was* a memcmp, but that's harder to do. Fix this for C# later
102- if ( buffer [ 10 ] != sub [ 10 ] && buffer [ 11 ] != sub [ 11 ] && ( buffer [ 3 ] != sub [ 3 ] || buffer [ 7 ] != sub [ 7 ] || buffer [ 4 ] != sub [ 4 ] || buffer [ 8 ] != sub [ 8 ] || buffer [ 5 ] != sub [ 5 ] || buffer [ 9 ] != sub [ 9 ] ) )
109+ if ( buffer [ 10 ] != sub [ 10 ] && buffer [ 11 ] != sub [ 11 ] && ( buffer [ 3 ] != sub [ 3 ] || buffer [ 4 ] != sub [ 4 ] || buffer [ 5 ] != sub [ 5 ] || buffer [ 7 ] != sub [ 7 ] || buffer [ 8 ] != sub [ 8 ] || buffer [ 9 ] != sub [ 9 ] ) )
103110 {
104- if ( buffer [ 10 ] != sub [ 10 ] || buffer [ 11 ] != sub [ 11 ] || buffer [ 3 ] != sub [ 3 ] || buffer [ 7 ] != sub [ 7 ] || buffer [ 4 ] != sub [ 4 ] || buffer [ 8 ] != sub [ 8 ] || buffer [ 5 ] != sub [ 5 ] || buffer [ 9 ] != sub [ 9 ] )
111+ if ( buffer [ 3 ] != sub [ 3 ] || buffer [ 4 ] != sub [ 4 ] || buffer [ 5 ] != sub [ 5 ] || buffer [ 7 ] != sub [ 7 ] || buffer [ 8 ] != sub [ 8 ] || buffer [ 9 ] != sub [ 9 ] || buffer [ 10 ] != sub [ 10 ] || buffer [ 11 ] != sub [ 11 ] )
105112 {
106113 Console . Write ( $ "MSF: { sub [ 7 ] : x} :{ sub [ 8 ] : x} :{ sub [ 9 ] : x} Q-Data: { buffer [ 0 ] : x} { buffer [ 1 ] : x} { buffer [ 2 ] : x} { buffer [ 3 ] : x} :{ buffer [ 4 ] : x} :{ buffer [ 5 ] : x} { buffer [ 6 ] : x} { buffer [ 7 ] : x} :{ buffer [ 8 ] : x} :{ buffer [ 9 ] : x} { buffer [ 10 ] : x} { buffer [ 11 ] : x} xor { crc ^ ( ( buffer [ 10 ] << 8 ) + buffer [ 11 ] ) : x} % { CRC16 . Calculate ( buffer , 0 , 10 ) ^ ( ( buffer [ 10 ] << 8 ) + buffer [ 11 ] ) : x} ") ;
107- //Console.Write("\nMSF: %02x:%02x:%02x Q-Data: %02x%02x%02x %02x:%02x:%02x %02x %02x:%02x:%02x %02x%02x", sub[7], sub[8], sub[9], sub[0], sub[1], sub[2], sub[3], sub[4], sub[5], sub[6], sub[7], sub[8], sub[9], sub[10], sub[11]);
114+ //Console.Write($ "\nMSF: { sub[7]:x}:{ sub[8]:x}:{ sub[9]:x} Q-Data: { sub[0]:x}{ sub[1]:x}{ sub[2]:x} { sub[3]:x}:{ sub[4]:x}:{ sub[5]:x} { sub[6]:x} { sub[7]:x}:{ sub[8]:x}:{ sub[9]:x} { sub[10]:x}{ sub[11]:x}" );
108115 if ( buffer [ 3 ] != sub [ 3 ] && buffer [ 7 ] != sub [ 7 ] && buffer [ 4 ] == sub [ 4 ] && buffer [ 8 ] == sub [ 8 ] && buffer [ 5 ] == sub [ 5 ] && buffer [ 9 ] == sub [ 9 ] )
109116 Console . Write ( $ " P1 xor { buffer [ 3 ] ^ sub [ 3 ] : x} { buffer [ 7 ] ^ sub [ 7 ] : x} ") ;
110117 else if ( buffer [ 3 ] == sub [ 3 ] && buffer [ 7 ] == sub [ 7 ] && buffer [ 4 ] != sub [ 4 ] && buffer [ 8 ] != sub [ 8 ] && buffer [ 5 ] == sub [ 5 ] && buffer [ 9 ] == sub [ 9 ] )
@@ -115,12 +122,12 @@ public static bool CheckSubfile(Stream subfile)
115122 Console . Write ( " ?" ) ;
116123
117124 Console . Write ( "\n " ) ;
118- psectors ++ ;
125+ modifiedSectors ++ ;
119126 }
120127 }
121128 }
122129
123- Console . WriteLine ( $ "Number of modified sectors: { psectors } ") ;
130+ Console . WriteLine ( $ "Number of modified sectors: { modifiedSectors } ") ;
124131 return true ;
125132 }
126133
0 commit comments