12345678910111213141516171819202122232425262728293031323334353637 |
- #include <../base.hpp>
- #define READER_CPP
- #include "reader.hpp"
- #include "filereader.cpp"
- #if defined(GZIP_SUPPORT)
- #include "gzreader.cpp"
- #include "zipreader.cpp"
- #endif
- #if defined(JMA_SUPPORT)
- #include "jmareader.cpp"
- #endif
- Reader::Type Reader::detect(const char *fn, bool inspectheader) {
- file fp;
- if(!fp.open(fn, file::mode_read)) return Unknown;
- uint8_t p[8];
- memset(p, 0, sizeof p);
- fp.read(p, 8);
- fp.close();
- if(inspectheader == true) {
- //inspect file header to determine type
- if(p[0] == 0x1f && p[1] == 0x8b && p[2] == 0x08 && p[3] <= 0x1f) return GZIP;
- if(p[0] == 0x50 && p[1] == 0x4b && p[2] == 0x03 && p[3] == 0x04) return ZIP;
- if(p[0] == 0x4a && p[1] == 0x4d && p[2] == 0x41 && p[3] == 0x00 && p[4] == 0x4e) return JMA;
- } else {
- //check file extension to determine type
- if(striend(fn, ".gz")) return GZIP;
- if(striend(fn, ".zip") || striend(fn, ".z")) return ZIP;
- if(striend(fn, ".jma")) return JMA;
- }
- return Normal;
- }
|