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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/libraries/nacl_io/mount.h
diff --git a/native_client_sdk/src/libraries/nacl_io/mount.h b/native_client_sdk/src/libraries/nacl_io/mount.h
index abfe68f711d6614db08ca12e0d2184bf21cb245a..ddf1fd5c76814eb0b27be4793d938fff69a048bd 100644
--- a/native_client_sdk/src/libraries/nacl_io/mount.h
+++ b/native_client_sdk/src/libraries/nacl_io/mount.h
@@ -8,6 +8,7 @@
#include <map>
#include <string>
+#include "nacl_io/error.h"
#include "nacl_io/inode_pool.h"
#include "nacl_io/mount_node.h"
#include "nacl_io/path.h"
@@ -19,7 +20,8 @@ class PepperInterface;
typedef std::map<std::string, std::string> StringMap_t;
-
+// NOTE: The KernelProxy is the only class that should be setting errno. All
+// other classes should return Error (as defined by nacl_io/error.h).
class Mount : public RefObject {
protected:
// The protected functions are only used internally and will not
@@ -30,38 +32,49 @@ class Mount : public RefObject {
// Init must be called by the factory before the mount is used.
// This function must assign a root node, or replace FindNode.
// |ppapi| can be NULL. If so, this mount cannot make any pepper calls.
- virtual bool Init(int dev, StringMap_t& args, PepperInterface* ppapi);
+ virtual Error Init(int dev, StringMap_t& args, PepperInterface* ppapi);
virtual void Destroy();
public:
template <class M>
- static Mount* Create(int dev, StringMap_t& args, PepperInterface* ppapi);
+ // Assumes that |out_mount| is non-NULL.
+ static Error Create(int dev,
+ StringMap_t& args,
+ PepperInterface* ppapi,
+ Mount** out_mount);
PepperInterface* ppapi() { return ppapi_; }
- // All paths are expected to containing a leading "/"
+ // Assumes that |node| is non-NULL.
void AcquireNode(MountNode* node);
+ // Assumes that |node| is non-NULL.
void ReleaseNode(MountNode* node);
+ // All paths in functions below are expected to containing a leading "/".
+
// Open a node at |path| with the specified open flags. The resulting
// MountNode is created with a ref count of 1.
- virtual MountNode *Open(const Path& path, int o_flags) = 0;
+ // Assumes that |out_node| is non-NULL.
+ virtual Error Open(const Path& path, int o_flags, MountNode** out_node) = 0;
// OpenResource is only used to read files from the NaCl NMF file. No mount
// except MountPassthrough should implement it.
- virtual MountNode *OpenResource(const Path& path) { return NULL; }
+ // Assumes that |out_node| is non-NULL.
+ virtual Error OpenResource(const Path& path, MountNode** out_node);
// Unlink, Mkdir, Rmdir will affect the both the RefCount
// and the nlink number in the stat object.
- virtual int Unlink(const Path& path) = 0;
- virtual int Mkdir(const Path& path, int permissions) = 0;
- virtual int Rmdir(const Path& path) = 0;
- virtual int Remove(const Path& path) = 0;
+ virtual Error Unlink(const Path& path) = 0;
+ virtual Error Mkdir(const Path& path, int permissions) = 0;
+ virtual Error Rmdir(const Path& path) = 0;
+ virtual Error Remove(const Path& path) = 0;
// Convert from R,W,R/W open flags to STAT permission flags
static int OpenModeToPermission(int mode);
- void OnNodeCreated(MountNode* node) ;
+ // Assumes that |node| is non-NULL.
+ void OnNodeCreated(MountNode* node);
+ // Assumes that |node| is non-NULL.
void OnNodeDestroyed(MountNode* node);
protected:
@@ -81,16 +94,22 @@ class Mount : public RefObject {
DISALLOW_COPY_AND_ASSIGN(Mount);
};
-
-template <class M>
/*static*/
-Mount* Mount::Create(int dev, StringMap_t& args, PepperInterface* ppapi) {
+template <class M>
+Error Mount::Create(int dev,
+ StringMap_t& args,
+ PepperInterface* ppapi,
+ Mount** out_mount) {
Mount* mnt = new M();
- if (mnt->Init(dev, args, ppapi) == false) {
+ Error error = mnt->Init(dev, args, ppapi);
+ if (error) {
delete mnt;
- return NULL;
+ *out_mount = NULL;
+ return error;
}
- return mnt;
+
+ *out_mount = mnt;
+ return 0;
}
#endif // LIBRARIES_NACL_IO_MOUNT_H_
« 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