Index: native_client_sdk/src/libraries/nacl_io/mount_html5fs.cc |
diff --git a/native_client_sdk/src/libraries/nacl_io/mount_html5fs.cc b/native_client_sdk/src/libraries/nacl_io/mount_html5fs.cc |
index 9b995359aed5b02820d683e57d3f68bcc08245d9..99004883de9f03b4486d0b5d4a81f9fa8fd9f385 100644 |
--- a/native_client_sdk/src/libraries/nacl_io/mount_html5fs.cc |
+++ b/native_client_sdk/src/libraries/nacl_io/mount_html5fs.cc |
@@ -24,96 +24,85 @@ int64_t strtoull(const char* nptr, char** endptr, int base) { |
} // namespace |
-MountNode *MountHtml5Fs::Open(const Path& path, int mode) { |
- if (BlockUntilFilesystemOpen() != PP_OK) { |
- errno = ENODEV; |
- return NULL; |
- } |
+Error MountHtml5Fs::Open(const Path& path, int mode, MountNode** out_node) { |
+ *out_node = NULL; |
+ |
+ Error error = BlockUntilFilesystemOpen(); |
+ if (error) |
+ return error; |
- PP_Resource fileref = ppapi()->GetFileRefInterface()->Create( |
- filesystem_resource_, path.Join().c_str()); |
+ PP_Resource fileref = ppapi()->GetFileRefInterface() |
+ ->Create(filesystem_resource_, path.Join().c_str()); |
if (!fileref) |
- return NULL; |
+ return ENOSYS; |
MountNodeHtml5Fs* node = new MountNodeHtml5Fs(this, fileref); |
- if (!node->Init(mode)) { |
+ error = node->Init(mode); |
+ if (error) { |
node->Release(); |
- return NULL; |
+ return error; |
} |
- return node; |
+ *out_node = node; |
+ return 0; |
} |
-int MountHtml5Fs::Unlink(const Path& path) { |
- return Remove(path); |
-} |
+Error MountHtml5Fs::Unlink(const Path& path) { return Remove(path); } |
-int MountHtml5Fs::Mkdir(const Path& path, int permissions) { |
- if (BlockUntilFilesystemOpen() != PP_OK) { |
- errno = ENODEV; |
- return -1; |
- } |
+Error MountHtml5Fs::Mkdir(const Path& path, int permissions) { |
+ Error error = BlockUntilFilesystemOpen(); |
+ if (error) |
+ return error; |
ScopedResource fileref_resource( |
- ppapi(), ppapi()->GetFileRefInterface()->Create(filesystem_resource_, |
- path.Join().c_str())); |
- if (!fileref_resource.pp_resource()) { |
- errno = EINVAL; |
- return -1; |
- } |
+ ppapi(), |
+ ppapi()->GetFileRefInterface()->Create(filesystem_resource_, |
+ path.Join().c_str())); |
+ if (!fileref_resource.pp_resource()) |
+ return EIO; |
int32_t result = ppapi()->GetFileRefInterface()->MakeDirectory( |
fileref_resource.pp_resource(), PP_FALSE, PP_BlockUntilComplete()); |
- if (result != PP_OK) { |
- errno = PPErrorToErrno(result); |
- return -1; |
- } |
+ if (result != PP_OK) |
+ return PPErrorToErrno(result); |
return 0; |
} |
-int MountHtml5Fs::Rmdir(const Path& path) { |
- return Remove(path); |
-} |
+Error MountHtml5Fs::Rmdir(const Path& path) { return Remove(path); } |
-int MountHtml5Fs::Remove(const Path& path) { |
- if (BlockUntilFilesystemOpen() != PP_OK) { |
- errno = ENODEV; |
- return -1; |
- } |
+Error MountHtml5Fs::Remove(const Path& path) { |
+ Error error = BlockUntilFilesystemOpen(); |
+ if (error) |
+ return error; |
ScopedResource fileref_resource( |
- ppapi(), ppapi()->GetFileRefInterface()->Create(filesystem_resource_, |
- path.Join().c_str())); |
- if (!fileref_resource.pp_resource()) { |
- errno = EINVAL; |
- return -1; |
- } |
+ ppapi(), |
+ ppapi()->GetFileRefInterface()->Create(filesystem_resource_, |
+ path.Join().c_str())); |
+ if (!fileref_resource.pp_resource()) |
+ return ENOSYS; |
- int32_t result = ppapi()->GetFileRefInterface()->Delete( |
- fileref_resource.pp_resource(), |
- PP_BlockUntilComplete()); |
- if (result != PP_OK) { |
- errno = PPErrorToErrno(result); |
- return -1; |
- } |
+ int32_t result = ppapi()->GetFileRefInterface() |
+ ->Delete(fileref_resource.pp_resource(), PP_BlockUntilComplete()); |
+ if (result != PP_OK) |
+ return PPErrorToErrno(result); |
return 0; |
} |
- |
MountHtml5Fs::MountHtml5Fs() |
: filesystem_resource_(0), |
filesystem_open_has_result_(false), |
- filesystem_open_result_(PP_OK) { |
-} |
+ filesystem_open_error_(0) {} |
-bool MountHtml5Fs::Init(int dev, StringMap_t& args, PepperInterface* ppapi) { |
- if (!Mount::Init(dev, args, ppapi)) |
- return false; |
+Error MountHtml5Fs::Init(int dev, StringMap_t& args, PepperInterface* ppapi) { |
+ Error error = Mount::Init(dev, args, ppapi); |
+ if (error) |
+ return error; |
if (!ppapi) |
- return false; |
+ return ENOSYS; |
pthread_cond_init(&filesystem_open_cond_, NULL); |
@@ -121,7 +110,7 @@ bool MountHtml5Fs::Init(int dev, StringMap_t& args, PepperInterface* ppapi) { |
PP_FileSystemType filesystem_type = PP_FILESYSTEMTYPE_LOCALPERSISTENT; |
int64_t expected_size = 0; |
for (StringMap_t::iterator iter = args.begin(), end = args.end(); iter != end; |
- ++iter) { |
+ ++iter) { |
if (iter->first == "type") { |
if (iter->second == "PERSISTENT") { |
filesystem_type = PP_FILESYSTEMTYPE_LOCALPERSISTENT; |
@@ -134,33 +123,32 @@ bool MountHtml5Fs::Init(int dev, StringMap_t& args, PepperInterface* ppapi) { |
} |
// Initialize filesystem. |
- filesystem_resource_ = ppapi->GetFileSystemInterface()->Create( |
- ppapi_->GetInstance(), filesystem_type); |
- |
+ filesystem_resource_ = ppapi->GetFileSystemInterface() |
+ ->Create(ppapi_->GetInstance(), filesystem_type); |
if (filesystem_resource_ == 0) |
- return false; |
+ return ENOSYS; |
// We can't block the main thread, so make an asynchronous call if on main |
// thread. If we are off-main-thread, then don't make an asynchronous call; |
// otherwise we require a message loop. |
bool main_thread = ppapi->IsMainThread(); |
- PP_CompletionCallback cc = main_thread ? |
- PP_MakeCompletionCallback(&MountHtml5Fs::FilesystemOpenCallbackThunk, |
- this) : |
- PP_BlockUntilComplete(); |
+ PP_CompletionCallback cc = |
+ main_thread ? PP_MakeCompletionCallback( |
+ &MountHtml5Fs::FilesystemOpenCallbackThunk, this) |
+ : PP_BlockUntilComplete(); |
- int32_t result = ppapi->GetFileSystemInterface()->Open( |
- filesystem_resource_, expected_size, cc); |
+ int32_t result = ppapi->GetFileSystemInterface() |
+ ->Open(filesystem_resource_, expected_size, cc); |
if (!main_thread) { |
filesystem_open_has_result_ = true; |
- filesystem_open_result_ = result; |
+ filesystem_open_error_ = PPErrorToErrno(result); |
- return filesystem_open_result_ == PP_OK; |
+ return filesystem_open_error_; |
} else { |
// We have to assume the call to Open will succeed; there is no better |
// result to return here. |
- return true; |
+ return 0; |
} |
} |
@@ -169,12 +157,12 @@ void MountHtml5Fs::Destroy() { |
pthread_cond_destroy(&filesystem_open_cond_); |
} |
-int32_t MountHtml5Fs::BlockUntilFilesystemOpen() { |
+Error MountHtml5Fs::BlockUntilFilesystemOpen() { |
AutoLock lock(&lock_); |
while (!filesystem_open_has_result_) { |
pthread_cond_wait(&filesystem_open_cond_, &lock_); |
} |
- return filesystem_open_result_; |
+ return filesystem_open_error_; |
} |
// static |
@@ -187,6 +175,6 @@ void MountHtml5Fs::FilesystemOpenCallbackThunk(void* user_data, |
void MountHtml5Fs::FilesystemOpenCallback(int32_t result) { |
AutoLock lock(&lock_); |
filesystem_open_has_result_ = true; |
- filesystem_open_result_ = result; |
+ filesystem_open_error_ = PPErrorToErrno(result); |
pthread_cond_signal(&filesystem_open_cond_); |
} |