Diff

Not logged in

Differences From Artifact [cf24a8abe2b880fc]:

To Artifact [4c58bb3061c0a99d]:


256 256 257 return -1; 257 return -1; 258 } 258 } 259 259 260 private bool read_header( out BgaHeader hdr ) 260 private bool read_header( out BgaHeader hdr ) 261 { 261 { 262 // リトルエンディアンを仮定。ヘッダ読み込み 262 // リトルエンディアンを仮定。ヘッダ読み込み 263 string buf = cast(string) fp.read(28); | 263 void[] buf = fp.read(28); 264 if( buf.length < 28 ) return false; 264 if( buf.length < 28 ) return false; 265 buf.length = BgaHeader.sizeof; 265 buf.length = BgaHeader.sizeof; 266 hdr = (cast(BgaHeader[]) buf)[0]; 266 hdr = (cast(BgaHeader[]) buf)[0]; 267 hdr.fname = ""; 267 hdr.fname = ""; 268 268 269 // ファイル名 269 // ファイル名 270 hdr.fname = cast(string) fp.read(hdr.dir_name_len + hdr.file_nam 270 hdr.fname = cast(string) fp.read(hdr.dir_name_len + hdr.file_nam 271 if( hdr.fname.length < hdr.dir_name_len + hdr.file_name_len ) re 271 if( hdr.fname.length < hdr.dir_name_len + hdr.file_name_len ) re 272 272 273 // チェックサム 273 // チェックサム 274 int sum = 0; 274 int sum = 0; 275 for( int i=4; i!=28; ++i ) sum += signed_char(buf[i]); | 275 for( int i=4; i!=28; ++i ) sum += signed_char((cast(char[])bu 276 foreach( char c ; hdr.fname ) sum += signed_char(c); 276 foreach( char c ; hdr.fname ) sum += signed_char(c); 277 return (sum == hdr.checksum); 277 return (sum == hdr.checksum); 278 } 278 } 279 279 280 private bool is_compressed( ref BgaHeader hdr ) // ref=just for optimiza 280 private bool is_compressed( ref BgaHeader hdr ) // ref=just for optimiza 281 { 281 { 282 // ヘッダから、ファイルが圧縮格納されているかどうかを判定 282 // ヘッダから、ファイルが圧縮格納されているかどうかを判定