blob: 7bef6af6bda86d8352d9b81b841030d37510efb2 [file] [log] [blame]
Lingfeng Yang43459932020-10-31 01:34:58 -07001// Copyright 2020 The Android Open Source Project
Lingfeng Yang3c944902020-10-28 11:56:43 -07002//
Lingfeng Yang43459932020-10-31 01:34:58 -07003// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
Lingfeng Yang3c944902020-10-28 11:56:43 -07006//
Lingfeng Yang43459932020-10-31 01:34:58 -07007// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
Lingfeng Yang3c944902020-10-28 11:56:43 -070014
15#pragma once
16
17#include "base/Compiler.h"
18#include "base/Stream.h"
19
Lingfeng Yang3c944902020-10-28 11:56:43 -070020
21#include <stdio.h>
22
23namespace android {
24namespace base {
25
26// An implementation of android::base::Stream interface on top of an
27// stdio FILE* instance.
28class StdioStream : public Stream {
29public:
30 enum Ownership { kNotOwner, kOwner };
31
32 StdioStream(FILE* file = nullptr, Ownership ownership = kNotOwner);
33 StdioStream(StdioStream&& other);
34 StdioStream& operator=(StdioStream&& other);
35
36 virtual ~StdioStream();
37 virtual ssize_t read(void* buffer, size_t size) override;
38 virtual ssize_t write(const void* buffer, size_t size) override;
39
40 FILE* get() const { return mFile; }
41 void close();
42
43private:
44
45 DISALLOW_COPY_AND_ASSIGN(StdioStream);
46
47 FILE* mFile;
48 Ownership mOwnership;
49};
50
51} // namespace base
52} // namespace android