15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file.
4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef LIBRARIES_NACL_IO_MEMFS_MEM_FS_NODE_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define LIBRARIES_NACL_IO_MEMFS_MEM_FS_NODE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "nacl_io/node.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace nacl_io {
11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MemFsNode : public Node {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  explicit MemFsNode(Filesystem* filesystem);
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~MemFsNode();
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Normal read/write operations on a file
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual Error Read(const HandleAttr& attr,
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                     void* buf,
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                     size_t count,
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                     int* out_bytes);
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual Error Write(const HandleAttr& attr,
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      const void* buf,
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      size_t count,
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      int* out_bytes);
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual Error FTruncate(off_t size);
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual Error Fchmod(mode_t mode);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Error Resize(off_t size);
34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  char* data_;
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  size_t data_capacity_;
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  friend class MemFs;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}  // namespace nacl_io
41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // LIBRARIES_NACL_IO_MEMFS_MEM_FS_NODE_H_
43