X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_file_read.cpp;h=46c83ff2171894053d9fd8df10a6bc4a4f49364b;hb=ef7013981f3bf403b375a998faf49f4b8f59083c;hp=68bc74a4978f6dc24a2d82c396def987bdae366d;hpb=3320d024ed6c0b56bda93ca876d8aec9729d7771;p=apitrace diff --git a/common/trace_file_read.cpp b/common/trace_file_read.cpp index 68bc74a..46c83ff 100644 --- a/common/trace_file_read.cpp +++ b/common/trace_file_read.cpp @@ -24,6 +24,8 @@ **************************************************************************/ +#include + #include "os.hpp" #include "trace_file.hpp" @@ -34,17 +36,25 @@ using namespace trace; File * File::createForRead(const char *filename) { - File *file; + std::ifstream stream(filename, std::ifstream::binary | std::ifstream::in); + if (!stream.is_open()) { + os::log("error: failed to open %s\n", filename); + return NULL; + } + unsigned char byte1, byte2; + stream >> byte1; + stream >> byte2; + stream.close(); - if (File::isSnappyCompressed(filename)) { + File *file; + if (byte1 == SNAPPY_BYTE1 && byte2 == SNAPPY_BYTE2) { file = File::createSnappy(); - } else if (File::isZLibCompressed(filename)) { + } else if (byte1 == 0x1f && byte2 == 0x8b) { file = File::createZLib(); } else { - os::log("error: could not determine %s compression type\n", filename); + os::log("error: %s: unkwnown compression\n", filename); return NULL; } - if (!file) { return NULL; }