Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/mount.h

Issue 16232016: [NaCl SDK] nacl_io: big refactor to return error value (errno). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge master, fix windows Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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_H_ 5 #ifndef LIBRARIES_NACL_IO_MOUNT_H_
6 #define LIBRARIES_NACL_IO_MOUNT_H_ 6 #define LIBRARIES_NACL_IO_MOUNT_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
11 #include "nacl_io/error.h"
11 #include "nacl_io/inode_pool.h" 12 #include "nacl_io/inode_pool.h"
12 #include "nacl_io/mount_node.h" 13 #include "nacl_io/mount_node.h"
13 #include "nacl_io/path.h" 14 #include "nacl_io/path.h"
14 #include "sdk_util/macros.h" 15 #include "sdk_util/macros.h"
15 #include "sdk_util/ref_object.h" 16 #include "sdk_util/ref_object.h"
16 17
17 class MountNode; 18 class MountNode;
18 class PepperInterface; 19 class PepperInterface;
19 20
20 typedef std::map<std::string, std::string> StringMap_t; 21 typedef std::map<std::string, std::string> StringMap_t;
21 22
22 23 // NOTE: The KernelProxy is the only class that should be setting errno. All
24 // other classes should return Error (as defined by nacl_io/error.h).
23 class Mount : public RefObject { 25 class Mount : public RefObject {
24 protected: 26 protected:
25 // The protected functions are only used internally and will not 27 // The protected functions are only used internally and will not
26 // acquire or release the mount's lock. 28 // acquire or release the mount's lock.
27 Mount(); 29 Mount();
28 virtual ~Mount(); 30 virtual ~Mount();
29 31
30 // Init must be called by the factory before the mount is used. 32 // Init must be called by the factory before the mount is used.
31 // This function must assign a root node, or replace FindNode. 33 // This function must assign a root node, or replace FindNode.
32 // |ppapi| can be NULL. If so, this mount cannot make any pepper calls. 34 // |ppapi| can be NULL. If so, this mount cannot make any pepper calls.
33 virtual bool Init(int dev, StringMap_t& args, PepperInterface* ppapi); 35 virtual Error Init(int dev, StringMap_t& args, PepperInterface* ppapi);
34 virtual void Destroy(); 36 virtual void Destroy();
35 37
36 public: 38 public:
37 template <class M> 39 template <class M>
38 static Mount* Create(int dev, StringMap_t& args, PepperInterface* ppapi); 40 // Assumes that |out_mount| is non-NULL.
41 static Error Create(int dev,
42 StringMap_t& args,
43 PepperInterface* ppapi,
44 Mount** out_mount);
39 45
40 PepperInterface* ppapi() { return ppapi_; } 46 PepperInterface* ppapi() { return ppapi_; }
41 47
42 // All paths are expected to containing a leading "/" 48 // Assumes that |node| is non-NULL.
43 void AcquireNode(MountNode* node); 49 void AcquireNode(MountNode* node);
50 // Assumes that |node| is non-NULL.
44 void ReleaseNode(MountNode* node); 51 void ReleaseNode(MountNode* node);
45 52
53 // All paths in functions below are expected to containing a leading "/".
54
46 // Open a node at |path| with the specified open flags. The resulting 55 // Open a node at |path| with the specified open flags. The resulting
47 // MountNode is created with a ref count of 1. 56 // MountNode is created with a ref count of 1.
48 virtual MountNode *Open(const Path& path, int o_flags) = 0; 57 // Assumes that |out_node| is non-NULL.
58 virtual Error Open(const Path& path, int o_flags, MountNode** out_node) = 0;
49 59
50 // OpenResource is only used to read files from the NaCl NMF file. No mount 60 // OpenResource is only used to read files from the NaCl NMF file. No mount
51 // except MountPassthrough should implement it. 61 // except MountPassthrough should implement it.
52 virtual MountNode *OpenResource(const Path& path) { return NULL; } 62 // Assumes that |out_node| is non-NULL.
63 virtual Error OpenResource(const Path& path, MountNode** out_node);
53 64
54 // Unlink, Mkdir, Rmdir will affect the both the RefCount 65 // Unlink, Mkdir, Rmdir will affect the both the RefCount
55 // and the nlink number in the stat object. 66 // and the nlink number in the stat object.
56 virtual int Unlink(const Path& path) = 0; 67 virtual Error Unlink(const Path& path) = 0;
57 virtual int Mkdir(const Path& path, int permissions) = 0; 68 virtual Error Mkdir(const Path& path, int permissions) = 0;
58 virtual int Rmdir(const Path& path) = 0; 69 virtual Error Rmdir(const Path& path) = 0;
59 virtual int Remove(const Path& path) = 0; 70 virtual Error Remove(const Path& path) = 0;
60 71
61 // Convert from R,W,R/W open flags to STAT permission flags 72 // Convert from R,W,R/W open flags to STAT permission flags
62 static int OpenModeToPermission(int mode); 73 static int OpenModeToPermission(int mode);
63 74
64 void OnNodeCreated(MountNode* node) ; 75 // Assumes that |node| is non-NULL.
76 void OnNodeCreated(MountNode* node);
77 // Assumes that |node| is non-NULL.
65 void OnNodeDestroyed(MountNode* node); 78 void OnNodeDestroyed(MountNode* node);
66 79
67 protected: 80 protected:
68 // Device number for the mount. 81 // Device number for the mount.
69 int dev_; 82 int dev_;
70 PepperInterface* ppapi_; // Weak reference. 83 PepperInterface* ppapi_; // Weak reference.
71 INodePool inode_pool_; 84 INodePool inode_pool_;
72 85
73 private: 86 private:
74 // May only be called by the KernelProxy when the Kernel's 87 // May only be called by the KernelProxy when the Kernel's
75 // lock is held, so we make it private. 88 // lock is held, so we make it private.
76 friend class KernelObject; 89 friend class KernelObject;
77 friend class KernelProxy; 90 friend class KernelProxy;
78 void Acquire() { RefObject::Acquire(); } 91 void Acquire() { RefObject::Acquire(); }
79 bool Release() { return RefObject::Release(); } 92 bool Release() { return RefObject::Release(); }
80 93
81 DISALLOW_COPY_AND_ASSIGN(Mount); 94 DISALLOW_COPY_AND_ASSIGN(Mount);
82 }; 95 };
83 96
97 /*static*/
98 template <class M>
99 Error Mount::Create(int dev,
100 StringMap_t& args,
101 PepperInterface* ppapi,
102 Mount** out_mount) {
103 Mount* mnt = new M();
104 Error error = mnt->Init(dev, args, ppapi);
105 if (error) {
106 delete mnt;
107 *out_mount = NULL;
108 return error;
109 }
84 110
85 template <class M> 111 *out_mount = mnt;
86 /*static*/ 112 return 0;
87 Mount* Mount::Create(int dev, StringMap_t& args, PepperInterface* ppapi) {
88 Mount* mnt = new M();
89 if (mnt->Init(dev, args, ppapi) == false) {
90 delete mnt;
91 return NULL;
92 }
93 return mnt;
94 } 113 }
95 114
96 #endif // LIBRARIES_NACL_IO_MOUNT_H_ 115 #endif // LIBRARIES_NACL_IO_MOUNT_H_
OLDNEW
« no previous file with comments | « native_client_sdk/src/libraries/nacl_io/library.dsc ('k') | native_client_sdk/src/libraries/nacl_io/mount.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698