| Index: native_client_sdk/src/libraries/nacl_io/mount_node_html5fs.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_io/mount_node_html5fs.cc b/native_client_sdk/src/libraries/nacl_io/mount_node_html5fs.cc
|
| index fb0d5ed2fbf4bb386b87b35b9219e06ca414da1e..86e8a4576490e4273fe213c2c861c3d0439201a0 100644
|
| --- a/native_client_sdk/src/libraries/nacl_io/mount_node_html5fs.cc
|
| +++ b/native_client_sdk/src/libraries/nacl_io/mount_node_html5fs.cc
|
| @@ -55,56 +55,53 @@ int32_t ModeToOpenFlags(int mode) {
|
| break;
|
| }
|
|
|
| - if (mode & O_CREAT) open_flags |= PP_FILEOPENFLAG_CREATE;
|
| - if (mode & O_TRUNC) open_flags |= PP_FILEOPENFLAG_TRUNCATE;
|
| - if (mode & O_EXCL) open_flags |= PP_FILEOPENFLAG_EXCLUSIVE;
|
| + if (mode & O_CREAT)
|
| + open_flags |= PP_FILEOPENFLAG_CREATE;
|
| + if (mode & O_TRUNC)
|
| + open_flags |= PP_FILEOPENFLAG_TRUNCATE;
|
| + if (mode & O_EXCL)
|
| + open_flags |= PP_FILEOPENFLAG_EXCLUSIVE;
|
|
|
| return open_flags;
|
| }
|
|
|
| } // namespace
|
|
|
| -int MountNodeHtml5Fs::FSync() {
|
| - int32_t result = mount_->ppapi()->GetFileIoInterface()->Flush(
|
| - fileio_resource_, PP_BlockUntilComplete());
|
| - if (result != PP_OK) {
|
| - errno = PPErrorToErrno(result);
|
| - return -1;
|
| - }
|
| -
|
| +Error MountNodeHtml5Fs::FSync() {
|
| + int32_t result = mount_->ppapi()->GetFileIoInterface()
|
| + ->Flush(fileio_resource_, PP_BlockUntilComplete());
|
| + if (result != PP_OK)
|
| + return PPErrorToErrno(result);
|
| return 0;
|
| }
|
|
|
| -int MountNodeHtml5Fs::GetDents(size_t offs, struct dirent* pdir, size_t size) {
|
| +Error MountNodeHtml5Fs::GetDents(size_t offs,
|
| + struct dirent* pdir,
|
| + size_t size,
|
| + int* out_bytes) {
|
| + *out_bytes = 0;
|
| +
|
| // If the buffer pointer is invalid, fail
|
| - if (NULL == pdir) {
|
| - errno = EINVAL;
|
| - return -1;
|
| - }
|
| + if (NULL == pdir)
|
| + return EINVAL;
|
|
|
| // If the buffer is too small, fail
|
| - if (size < sizeof(struct dirent)) {
|
| - errno = EINVAL;
|
| - return -1;
|
| - }
|
| + if (size < sizeof(struct dirent))
|
| + return EINVAL;
|
|
|
| - OutputBuffer output_buf = { NULL, 0 };
|
| - PP_ArrayOutput output = { &GetOutputBuffer, &output_buf };
|
| - int32_t result =
|
| - mount_->ppapi()->GetFileRefInterface()->ReadDirectoryEntries(
|
| - fileref_resource_, output, PP_BlockUntilComplete());
|
| - if (result != PP_OK) {
|
| - errno = PPErrorToErrno(result);
|
| - return -1;
|
| - }
|
| + OutputBuffer output_buf = {NULL, 0};
|
| + PP_ArrayOutput output = {&GetOutputBuffer, &output_buf};
|
| + int32_t result = mount_->ppapi()->GetFileRefInterface()->ReadDirectoryEntries(
|
| + fileref_resource_, output, PP_BlockUntilComplete());
|
| + if (result != PP_OK)
|
| + return PPErrorToErrno(result);
|
|
|
| std::vector<struct dirent> dirents;
|
| - PP_DirectoryEntry* entries =
|
| - static_cast<PP_DirectoryEntry*>(output_buf.data);
|
| + PP_DirectoryEntry* entries = static_cast<PP_DirectoryEntry*>(output_buf.data);
|
|
|
| for (int i = 0; i < output_buf.element_count; ++i) {
|
| - PP_Var file_name_var = mount_->ppapi()->GetFileRefInterface()->GetName(
|
| - entries[i].file_ref);
|
| + PP_Var file_name_var =
|
| + mount_->ppapi()->GetFileRefInterface()->GetName(entries[i].file_ref);
|
|
|
| // Release the file reference.
|
| mount_->ppapi()->ReleaseResource(entries[i].file_ref);
|
| @@ -113,14 +110,14 @@ int MountNodeHtml5Fs::GetDents(size_t offs, struct dirent* pdir, size_t size) {
|
| continue;
|
|
|
| uint32_t file_name_length;
|
| - const char* file_name = mount_->ppapi()->GetVarInterface()->VarToUtf8(
|
| - file_name_var, &file_name_length);
|
| + const char* file_name = mount_->ppapi()->GetVarInterface()
|
| + ->VarToUtf8(file_name_var, &file_name_length);
|
| if (!file_name)
|
| continue;
|
|
|
| file_name_length = std::min(
|
| static_cast<size_t>(file_name_length),
|
| - sizeof(static_cast<struct dirent*>(0)->d_name) - 1); // -1 for NULL.
|
| + sizeof(static_cast<struct dirent*>(0)->d_name) - 1); // -1 for NULL.
|
|
|
| dirents.push_back(dirent());
|
| struct dirent& direntry = dirents.back();
|
| @@ -138,33 +135,39 @@ int MountNodeHtml5Fs::GetDents(size_t offs, struct dirent* pdir, size_t size) {
|
| size -= size % sizeof(struct dirent);
|
| size_t max = dirents.size() * sizeof(struct dirent);
|
|
|
| - if (offs >= max) return 0;
|
| - if (offs + size >= max) size = max - offs;
|
| + if (offs >= max)
|
| + return 0;
|
| +
|
| + if (offs + size >= max)
|
| + size = max - offs;
|
|
|
| memcpy(pdir, reinterpret_cast<char*>(dirents.data()) + offs, size);
|
| return 0;
|
| }
|
|
|
| -int MountNodeHtml5Fs::GetStat(struct stat* stat) {
|
| +Error MountNodeHtml5Fs::GetStat(struct stat* stat) {
|
| AutoLock lock(&lock_);
|
|
|
| PP_FileInfo info;
|
| - int32_t result = mount_->ppapi()->GetFileIoInterface()->Query(
|
| - fileio_resource_, &info, PP_BlockUntilComplete());
|
| - if (result != PP_OK) {
|
| - errno = PPErrorToErrno(result);
|
| - return -1;
|
| - }
|
| + int32_t result = mount_->ppapi()->GetFileIoInterface()
|
| + ->Query(fileio_resource_, &info, PP_BlockUntilComplete());
|
| + if (result != PP_OK)
|
| + return PPErrorToErrno(result);
|
|
|
| // Fill in known info here.
|
| memcpy(stat, &stat_, sizeof(stat_));
|
|
|
| // Fill in the additional info from ppapi.
|
| switch (info.type) {
|
| - case PP_FILETYPE_REGULAR: stat->st_mode |= S_IFREG; break;
|
| - case PP_FILETYPE_DIRECTORY: stat->st_mode |= S_IFDIR; break;
|
| + case PP_FILETYPE_REGULAR:
|
| + stat->st_mode |= S_IFREG;
|
| + break;
|
| + case PP_FILETYPE_DIRECTORY:
|
| + stat->st_mode |= S_IFDIR;
|
| + break;
|
| case PP_FILETYPE_OTHER:
|
| - default: break;
|
| + default:
|
| + break;
|
| }
|
| stat->st_size = static_cast<off_t>(info.size);
|
| stat->st_atime = info.last_access_time;
|
| @@ -174,78 +177,90 @@ int MountNodeHtml5Fs::GetStat(struct stat* stat) {
|
| return 0;
|
| }
|
|
|
| -int MountNodeHtml5Fs::Read(size_t offs, void* buf, size_t count) {
|
| - int32_t result = mount_->ppapi()->GetFileIoInterface()->Read(
|
| - fileio_resource_, offs, static_cast<char*>(buf),
|
| - static_cast<int32_t>(count),
|
| - PP_BlockUntilComplete());
|
| - if (result < 0) {
|
| - errno = PPErrorToErrno(result);
|
| - return -1;
|
| - }
|
| +Error MountNodeHtml5Fs::Read(size_t offs,
|
| + void* buf,
|
| + size_t count,
|
| + int* out_bytes) {
|
| + *out_bytes = 0;
|
|
|
| - return result;
|
| + int32_t result =
|
| + mount_->ppapi()->GetFileIoInterface()->Read(fileio_resource_,
|
| + offs,
|
| + static_cast<char*>(buf),
|
| + static_cast<int32_t>(count),
|
| + PP_BlockUntilComplete());
|
| + if (result < 0)
|
| + return PPErrorToErrno(result);
|
| +
|
| + *out_bytes = result;
|
| + return 0;
|
| }
|
|
|
| -int MountNodeHtml5Fs::FTruncate(off_t size) {
|
| - int32_t result = mount_->ppapi()->GetFileIoInterface()->SetLength(
|
| - fileio_resource_, size, PP_BlockUntilComplete());
|
| - if (result != PP_OK) {
|
| - errno = PPErrorToErrno(result);
|
| - return -1;
|
| - }
|
| -
|
| +Error MountNodeHtml5Fs::FTruncate(off_t size) {
|
| + int32_t result = mount_->ppapi()->GetFileIoInterface()
|
| + ->SetLength(fileio_resource_, size, PP_BlockUntilComplete());
|
| + if (result != PP_OK)
|
| + return PPErrorToErrno(result);
|
| return 0;
|
| }
|
|
|
| -int MountNodeHtml5Fs::Write(size_t offs, const void* buf, size_t count) {
|
| - int32_t result = mount_->ppapi()->GetFileIoInterface()->Write(
|
| - fileio_resource_, offs, static_cast<const char*>(buf),
|
| - static_cast<int32_t>(count), PP_BlockUntilComplete());
|
| - if (result < 0) {
|
| - errno = PPErrorToErrno(result);
|
| - return -1;
|
| - }
|
| -
|
| - return result;
|
| +Error MountNodeHtml5Fs::Write(size_t offs,
|
| + const void* buf,
|
| + size_t count,
|
| + int* out_bytes) {
|
| + *out_bytes = 0;
|
| +
|
| + int32_t result = mount_->ppapi()->GetFileIoInterface()
|
| + ->Write(fileio_resource_,
|
| + offs,
|
| + static_cast<const char*>(buf),
|
| + static_cast<int32_t>(count),
|
| + PP_BlockUntilComplete());
|
| + if (result < 0)
|
| + return PPErrorToErrno(result);
|
| +
|
| + *out_bytes = result;
|
| + return 0;
|
| }
|
|
|
| -size_t MountNodeHtml5Fs::GetSize() {
|
| +Error MountNodeHtml5Fs::GetSize(size_t* out_size) {
|
| + *out_size = 0;
|
| +
|
| AutoLock lock(&lock_);
|
|
|
| PP_FileInfo info;
|
| - int32_t result = mount_->ppapi()->GetFileIoInterface()->Query(
|
| - fileio_resource_, &info, PP_BlockUntilComplete());
|
| - if (result != PP_OK) {
|
| - errno = PPErrorToErrno(result);
|
| - return -1;
|
| - }
|
| + int32_t result = mount_->ppapi()->GetFileIoInterface()
|
| + ->Query(fileio_resource_, &info, PP_BlockUntilComplete());
|
| + if (result != PP_OK)
|
| + return PPErrorToErrno(result);
|
|
|
| - return static_cast<size_t>(info.size);
|
| + *out_size = static_cast<size_t>(info.size);
|
| + return 0;
|
| }
|
|
|
| MountNodeHtml5Fs::MountNodeHtml5Fs(Mount* mount, PP_Resource fileref_resource)
|
| : MountNode(mount),
|
| fileref_resource_(fileref_resource),
|
| - fileio_resource_(0) {
|
| -}
|
| + fileio_resource_(0) {}
|
|
|
| -bool MountNodeHtml5Fs::Init(int perm) {
|
| - if (!MountNode::Init(Mount::OpenModeToPermission(perm)))
|
| - return false;
|
| +Error MountNodeHtml5Fs::Init(int perm) {
|
| + Error error = MountNode::Init(Mount::OpenModeToPermission(perm));
|
| + if (error)
|
| + return error;
|
|
|
| - fileio_resource_= mount_->ppapi()->GetFileIoInterface()->Create(
|
| - mount_->ppapi()->GetInstance());
|
| + fileio_resource_ = mount_->ppapi()->GetFileIoInterface()
|
| + ->Create(mount_->ppapi()->GetInstance());
|
| if (!fileio_resource_)
|
| - return false;
|
| + return ENOSYS;
|
|
|
| - int32_t open_result = mount_->ppapi()->GetFileIoInterface()->Open(
|
| - fileio_resource_, fileref_resource_, ModeToOpenFlags(perm),
|
| - PP_BlockUntilComplete());
|
| + int32_t open_result =
|
| + mount_->ppapi()->GetFileIoInterface()->Open(fileio_resource_,
|
| + fileref_resource_,
|
| + ModeToOpenFlags(perm),
|
| + PP_BlockUntilComplete());
|
| if (open_result != PP_OK)
|
| - return false;
|
| -
|
| - return true;
|
| + return PPErrorToErrno(open_result);
|
| + return 0;
|
| }
|
|
|
| void MountNodeHtml5Fs::Destroy() {
|
|
|