12 inline bool is_gzip(
const std::string& a_file,
bool& a_is){
13 unsigned char head[4];
14 {
unsigned int num = 4;
15 if(!
signature(a_file,head,num)) {a_is =
false;
return false;}
16 if(num!=4) {a_is =
false;
return true;}}
17 if(head[0]!=31) {a_is =
false;
return true;}
18 if(head[1]!=139) {a_is =
false;
return true;}
25 inline bool gzip_usize(
const std::string& a_file,
unsigned int& a_usz){
27 if(!
is_gzip(a_file,
is)) {a_usz=0;
return false;}
28 if(!
is) {a_usz=0;
return false;}
29 FILE* file = ::fopen(a_file.c_str(),
"rb");
30 if(!file) {a_usz=0;
return false;}
31 ::fseek(file,-4,SEEK_END);
33 size_t n = ::fread(buf,1,4,file);
35 if(n!=4) {a_usz=0;
return false;}
36 unsigned int b4 = buf[0];
37 unsigned int b3 = buf[1];
38 unsigned int b2 = buf[2];
39 unsigned int b1 = buf[3];
40 a_usz = (b1 << 24) | ((b2 << 16) + (b3 << 8) + b4);