blob: d25c9d967c46f4a159d43c54b82dd536b38290eb [file] [log] [blame]
yusukes@chromium.orgd257d182009-11-04 04:56:32 +00001// 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
10namespace ots {
11
yusukes@chromium.org0881b632009-11-24 02:17:27 +000012// An OTSStream implementation for testing.
yusukes@chromium.orgd257d182009-11-04 04:56:32 +000013class FILEStream : public OTSStream {
14 public:
15 explicit FILEStream(FILE *stream)
yusukes@chromium.org0881b632009-11-24 02:17:27 +000016 : file_(stream), position_(0) {
yusukes@chromium.orgd257d182009-11-04 04:56:32 +000017 }
18
19 ~FILEStream() {
20 }
21
22 bool WriteRaw(const void *data, size_t length) {
yusukes@chromium.org0881b632009-11-24 02:17:27 +000023 if (::fwrite(data, length, 1, file_) == 1) {
24 position_ += length;
25 return true;
26 }
27 return false;
yusukes@chromium.orgd257d182009-11-04 04:56:32 +000028 }
29
30 bool Seek(off_t position) {
bashi@chromium.org8d71e042012-05-07 08:45:16 +000031#if defined(_WIN32)
32 if (!::_fseeki64(file_, position, SEEK_SET)) {
33 position_ = position;
34 return true;
35 }
36#else
yusukes@chromium.org0881b632009-11-24 02:17:27 +000037 if (!::fseeko(file_, position, SEEK_SET)) {
38 position_ = position;
39 return true;
40 }
bashi@chromium.org8d71e042012-05-07 08:45:16 +000041#endif // defined(_WIN32)
ksakamoto@chromium.orge595ce52013-06-07 22:32:07 +000042 return false;
yusukes@chromium.orgd257d182009-11-04 04:56:32 +000043 }
44
45 off_t Tell() const {
yusukes@chromium.org0881b632009-11-24 02:17:27 +000046 return position_;
yusukes@chromium.orgd257d182009-11-04 04:56:32 +000047 }
48
49 private:
50 FILE * const file_;
yusukes@chromium.org0881b632009-11-24 02:17:27 +000051 off_t position_;
yusukes@chromium.orgd257d182009-11-04 04:56:32 +000052};
53
54} // namespace ots
55
56#endif // OTS_FILE_STREAM_H_