From 6dce37c812e3fd86171934b72ad8286a3302a571 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Mon, 8 Aug 2011 09:59:58 -0400 Subject: [PATCH] Add a file identifier to snappy compressed traces --- trace_file.cpp | 30 ++++++++++++++++++++++++++++++ trace_file.hpp | 1 + 2 files changed, 31 insertions(+) diff --git a/trace_file.cpp b/trace_file.cpp index 10e6565..27b3eb1 100644 --- a/trace_file.cpp +++ b/trace_file.cpp @@ -10,6 +10,9 @@ using namespace Trace; +#define SNAPPY_BYTE1 'a' +#define SNAPPY_BYTE2 't' + File::File(const std::string &filename, File::Mode mode) : m_filename(filename), @@ -104,6 +107,23 @@ bool File::isZLibCompressed(const std::string &filename) return (byte1 == 0x1f && byte2 == 0x8b); } + +bool File::isSnappyCompressed(const std::string &filename) +{ + std::fstream stream(filename.c_str(), + std::fstream::binary | std::fstream::in); + if (!stream.is_open()) + return false; + + unsigned char byte1, byte2; + stream >> byte1; + stream >> byte2; + stream.close(); + + return (byte1 == SNAPPY_BYTE1 && byte2 == SNAPPY_BYTE2); +} + + ZLibFile::ZLibFile(const std::string &filename, File::Mode mode) : File(filename, mode), @@ -179,7 +199,17 @@ bool SnappyFile::rawOpen(const std::string &filename, File::Mode mode) //read in the initial buffer if we're reading if (m_stream.is_open() && mode == File::Read) { + // read the snappy file identifier + unsigned char byte1, byte2; + m_stream >> byte1; + m_stream >> byte2; + assert(byte1 == SNAPPY_BYTE1 && byte2 == SNAPPY_BYTE2); + flushCache(); + } else if (m_stream.is_open() && mode == File::Write) { + // write the snappy file identifier + m_stream << SNAPPY_BYTE1; + m_stream << SNAPPY_BYTE2; } return m_stream.is_open(); } diff --git a/trace_file.hpp b/trace_file.hpp index 3afa709..ddc36c0 100644 --- a/trace_file.hpp +++ b/trace_file.hpp @@ -14,6 +14,7 @@ public: }; public: static bool isZLibCompressed(const std::string &filename); + static bool isSnappyCompressed(const std::string &filename); public: File(const std::string &filename = std::string(), File::Mode mode = File::Read); -- 2.43.0