• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 The Android Open Source Project
2 //
3 // 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
6 //
7 // 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.
14 
15 #pragma once
16 
17 #include "aemu/base/Compiler.h"
18 #include "aemu/base/files/Stream.h"
19 
20 
21 #include <stdio.h>
22 
23 namespace android {
24 namespace base {
25 
26 // An implementation of android::base::Stream interface on top of an
27 // stdio FILE* instance.
28 class StdioStream : public Stream {
29 public:
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 
get()40     FILE* get() const { return mFile; }
41     void close();
42 
43 private:
44 
45     DISALLOW_COPY_AND_ASSIGN(StdioStream);
46 
47     FILE* mFile;
48     Ownership mOwnership;
49 };
50 
51 }  // namespace base
52 }  // namespace android
53