OLD | NEW |
1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
4 */ | 4 */ |
5 #ifndef LIBRARIES_NACL_IO_MOUNT_NODE_H_ | 5 #ifndef LIBRARIES_NACL_IO_MOUNT_NODE_H_ |
6 #define LIBRARIES_NACL_IO_MOUNT_NODE_H_ | 6 #define LIBRARIES_NACL_IO_MOUNT_NODE_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
| 10 #include "nacl_io/error.h" |
10 #include "nacl_io/osstat.h" | 11 #include "nacl_io/osstat.h" |
11 #include "utils/ref_object.h" | 12 #include "utils/ref_object.h" |
12 | 13 |
13 struct dirent; | 14 struct dirent; |
14 struct stat; | 15 struct stat; |
15 class Mount; | 16 class Mount; |
16 | 17 |
17 class MountNode : public RefObject { | 18 class MountNode : public RefObject { |
18 protected: | 19 protected: |
19 explicit MountNode(Mount* mount); | 20 explicit MountNode(Mount* mount); |
20 virtual ~MountNode(); | 21 virtual ~MountNode(); |
21 | 22 |
22 protected: | 23 protected: |
23 // Initialize with node specific flags, in this case stat permissions. | 24 // Initialize with node specific flags, in this case stat permissions. |
24 virtual bool Init(int flags); | 25 virtual Error Init(int flags); |
25 virtual void Destroy(); | 26 virtual void Destroy(); |
26 | 27 |
27 public: | 28 public: |
28 // Normal OS operations on a node (file), can be called by the kernel | 29 // Normal OS operations on a node (file), can be called by the kernel |
29 // directly so it must lock and unlock appropriately. These functions | 30 // directly so it must lock and unlock appropriately. These functions |
30 // must not be called by the mount. | 31 // must not be called by the mount. |
31 virtual int FSync(); | 32 virtual Error FSync(); |
32 virtual int FTruncate(off_t length); | 33 virtual Error FTruncate(off_t length); |
33 virtual int GetDents(size_t offs, struct dirent* pdir, size_t count); | 34 virtual Error GetDents(size_t offs, |
34 virtual int GetStat(struct stat* stat); | 35 struct dirent* pdir, |
35 virtual int Ioctl(int request, char* arg); | 36 size_t count, |
36 virtual int Read(size_t offs, void* buf, size_t count); | 37 int* out_bytes); |
37 virtual int Write(size_t offs, const void* buf, size_t count); | 38 virtual Error GetStat(struct stat* stat); |
38 virtual void* MMap(void* addr, size_t length, int prot, int flags, | 39 virtual Error Ioctl(int request, char* arg); |
39 size_t offset); | 40 virtual Error Read(size_t offs, void* buf, size_t count, int* out_bytes); |
| 41 virtual Error Write(size_t offs, |
| 42 const void* buf, |
| 43 size_t count, |
| 44 int* out_bytes); |
| 45 virtual Error MMap(void* addr, |
| 46 size_t length, |
| 47 int prot, |
| 48 int flags, |
| 49 size_t offset, |
| 50 void** out_addr); |
40 | 51 |
41 virtual int GetLinks(); | 52 virtual int GetLinks(); |
42 virtual int GetMode(); | 53 virtual int GetMode(); |
43 virtual int GetType(); | 54 virtual int GetType(); |
44 virtual size_t GetSize(); | 55 virtual Error GetSize(size_t *out_size); |
45 virtual bool IsaDir(); | 56 virtual bool IsaDir(); |
46 virtual bool IsaFile(); | 57 virtual bool IsaFile(); |
47 virtual bool IsaTTY(); | 58 virtual bool IsaTTY(); |
48 | 59 |
49 protected: | 60 protected: |
50 // Directory operations on the node are done by the Mount. The mount's lock | 61 // Directory operations on the node are done by the Mount. The mount's lock |
51 // must be held while these calls are made. | 62 // must be held while these calls are made. |
52 | 63 |
53 // Adds or removes a directory entry updating the link numbers and refcount | 64 // Adds or removes a directory entry updating the link numbers and refcount |
54 virtual int AddChild(const std::string& name, MountNode *node); | 65 virtual Error AddChild(const std::string& name, MountNode* node); |
55 virtual int RemoveChild(const std::string& name); | 66 virtual Error RemoveChild(const std::string& name); |
56 | 67 |
57 // Find a child and return it without updating the refcount | 68 // Find a child and return it without updating the refcount |
58 virtual MountNode* FindChild(const std::string& name); | 69 virtual Error FindChild(const std::string& name, MountNode** out_node); |
59 virtual int ChildCount(); | 70 virtual int ChildCount(); |
60 | 71 |
61 // Update the link count | 72 // Update the link count |
62 virtual void Link(); | 73 virtual void Link(); |
63 virtual void Unlink(); | 74 virtual void Unlink(); |
64 | 75 |
65 protected: | 76 protected: |
66 struct stat stat_; | 77 struct stat stat_; |
67 Mount* mount_; | 78 Mount* mount_; |
68 | 79 |
69 friend class Mount; | 80 friend class Mount; |
70 friend class MountDev; | 81 friend class MountDev; |
71 friend class MountHtml5Fs; | 82 friend class MountHtml5Fs; |
72 friend class MountHttp; | 83 friend class MountHttp; |
73 friend class MountMem; | 84 friend class MountMem; |
74 friend class MountNodeDir; | 85 friend class MountNodeDir; |
75 }; | 86 }; |
76 | 87 |
77 #endif // LIBRARIES_NACL_IO_MOUNT_NODE_H_ | 88 #endif // LIBRARIES_NACL_IO_MOUNT_NODE_H_ |
OLD | NEW |