Home | History | Annotate | Download | only in test
      1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef OTS_FILE_STREAM_H_
      6 #define OTS_FILE_STREAM_H_
      7 
      8 #include "opentype-sanitiser.h"
      9 
     10 namespace ots {
     11 
     12 // An OTSStream implementation for testing.
     13 class FILEStream : public OTSStream {
     14  public:
     15   explicit FILEStream(FILE *stream)
     16       : file_(stream), position_(0) {
     17   }
     18 
     19   ~FILEStream() {
     20   }
     21 
     22   bool WriteRaw(const void *data, size_t length) {
     23     if (::fwrite(data, length, 1, file_) == 1) {
     24       position_ += length;
     25       return true;
     26     }
     27     return false;
     28   }
     29 
     30   bool Seek(off_t position) {
     31 #if defined(_WIN32)
     32     if (!::_fseeki64(file_, position, SEEK_SET)) {
     33       position_ = position;
     34       return true;
     35     }
     36 #else
     37     if (!::fseeko(file_, position, SEEK_SET)) {
     38       position_ = position;
     39       return true;
     40     }
     41 #endif  // defined(_WIN32)
     42     return false;
     43   }
     44 
     45   off_t Tell() const {
     46     return position_;
     47   }
     48 
     49  private:
     50   FILE * const file_;
     51   off_t position_;
     52 };
     53 
     54 }  // namespace ots
     55 
     56 #endif  // OTS_FILE_STREAM_H_
     57