g4tools  5.4.0
gzip
Go to the documentation of this file.
1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
2 // See the file tools.license for terms.
3 
4 #ifndef tools_gzip
5 #define tools_gzip
6 
7 #include "signature"
8 
9 namespace tools {
10 namespace file {
11 
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;}
19  //if(head[2]!=8) {a_is = false;return true;}
20  //if(head[3]!=8) {a_is = false;return true;}
21  a_is = true;
22  return true;
23 }
24 
25 inline bool gzip_usize(const std::string& a_file,unsigned int& a_usz){
26  bool is;
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);
32  unsigned char buf[4];
33  size_t n = ::fread(buf,1,4,file);
34  ::fclose(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);
41  return true;
42 }
43 
44 }}
45 
46 #endif
tools::jpeg::is
bool is(const std::string &a_file)
Definition: jpeg:216
tools::file::is_gzip
bool is_gzip(const std::string &a_file, bool &a_is)
Definition: gzip:12
tools::file::gzip_usize
bool gzip_usize(const std::string &a_file, unsigned int &a_usz)
Definition: gzip:25
tools::file::signature
bool signature(const std::string &a_file, unsigned char a_head[], unsigned int &a_num)
Definition: signature:13
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26
signature