// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef OTS_FILE_STREAM_H_ #define OTS_FILE_STREAM_H_ #include "opentype-sanitiser.h" namespace ots { // An OTSStream implementation for testing. class FILEStream : public OTSStream { public: explicit FILEStream(FILE *stream) : file_(stream), position_(0) { } ~FILEStream() { } bool WriteRaw(const void *data, size_t length) { if (::fwrite(data, length, 1, file_) == 1) { position_ += length; return true; } return false; } bool Seek(off_t position) { #if defined(_WIN32) if (!::_fseeki64(file_, position, SEEK_SET)) { position_ = position; return true; } #else if (!::fseeko(file_, position, SEEK_SET)) { position_ = position; return true; } #endif // defined(_WIN32) return false; } off_t Tell() const { return position_; } private: FILE * const file_; off_t position_; }; } // namespace ots #endif // OTS_FILE_STREAM_H_