Index: native_client_sdk/src/libraries/nacl_mounts/mount_node_html5fs.cc |
diff --git a/native_client_sdk/src/libraries/nacl_mounts/mount_node_html5fs.cc b/native_client_sdk/src/libraries/nacl_mounts/mount_node_html5fs.cc |
deleted file mode 100644 |
index ba0ca73a7ae8154e5b34d46eddf749c74f686633..0000000000000000000000000000000000000000 |
--- a/native_client_sdk/src/libraries/nacl_mounts/mount_node_html5fs.cc |
+++ /dev/null |
@@ -1,254 +0,0 @@ |
-/* Copyright (c) 2012 The Chromium Authors. All rights reserved. |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#include "nacl_mounts/mount_node_html5fs.h" |
- |
-#include <errno.h> |
-#include <fcntl.h> |
-#include <ppapi/c/pp_completion_callback.h> |
-#include <ppapi/c/pp_errors.h> |
-#include <ppapi/c/pp_file_info.h> |
-#include <ppapi/c/ppb_file_io.h> |
-#include <string.h> |
-#include <vector> |
-#include "nacl_mounts/mount.h" |
-#include "nacl_mounts/osdirent.h" |
-#include "nacl_mounts/pepper_interface.h" |
-#include "utils/auto_lock.h" |
- |
-namespace { |
- |
-int32_t ModeToOpenFlags(int mode) { |
- int32_t open_flags = 0; |
- |
- switch (mode & 3) { |
- default: |
- case O_RDONLY: |
- open_flags = PP_FILEOPENFLAG_READ; |
- break; |
- case O_WRONLY: |
- open_flags = PP_FILEOPENFLAG_WRITE; |
- break; |
- case O_RDWR: |
- open_flags = PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE; |
- 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; |
- |
- 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; |
- } |
- |
- return 0; |
-} |
- |
-int MountNodeHtml5Fs::GetDents(size_t offs, struct dirent* pdir, size_t size) { |
- // The directory reader interface is a dev interface, if it doesn't exist, |
- // just fail. |
- if (!mount_->ppapi()->GetDirectoryReaderInterface()) { |
- errno = ENOSYS; |
- return -1; |
- } |
- |
- // If the buffer pointer is invalid, fail |
- if (NULL == pdir) { |
- errno = EINVAL; |
- return -1; |
- } |
- |
- // If the buffer is too small, fail |
- if (size < sizeof(struct dirent)) { |
- errno = EINVAL; |
- return -1; |
- } |
- |
- ScopedResource directory_reader( |
- mount_->ppapi(), |
- mount_->ppapi()->GetDirectoryReaderInterface()->Create( |
- fileref_resource_)); |
- if (!directory_reader.pp_resource()) { |
- errno = ENOSYS; |
- return -1; |
- } |
- |
- std::vector<struct dirent> dirents; |
- PP_DirectoryEntry_Dev directory_entry = {0}; |
- while (1) { |
- int32_t result = |
- mount_->ppapi()->GetDirectoryReaderInterface()->GetNextEntry( |
- directory_reader.pp_resource(), &directory_entry, |
- PP_BlockUntilComplete()); |
- if (result != PP_OK) { |
- errno = PPErrorToErrno(result); |
- return -1; |
- } |
- |
- // file_ref == 0 is a sentry marking the end of the directory list. |
- if (!directory_entry.file_ref) |
- break; |
- |
- PP_Var file_name_var = mount_->ppapi()->GetFileRefInterface()->GetName( |
- directory_entry.file_ref); |
- if (file_name_var.type != PP_VARTYPE_STRING) |
- continue; |
- |
- uint32_t 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. |
- |
- dirents.push_back(dirent()); |
- struct dirent& direntry = dirents.back(); |
- direntry.d_ino = 0; // TODO(binji): Is this needed? |
- direntry.d_off = sizeof(struct dirent); |
- direntry.d_reclen = sizeof(struct dirent); |
- strncpy(direntry.d_name, file_name, file_name_length); |
- direntry.d_name[file_name_length] = 0; |
- } |
- |
- // Force size to a multiple of dirent |
- 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; |
- |
- memcpy(pdir, reinterpret_cast<char*>(dirents.data()) + offs, size); |
- return 0; |
-} |
- |
-int 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; |
- } |
- |
- // 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_OTHER: |
- default: break; |
- } |
- stat->st_size = static_cast<off_t>(info.size); |
- stat->st_atime = info.last_access_time; |
- stat->st_mtime = info.last_modified_time; |
- stat->st_ctime = info.creation_time; |
- |
- 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; |
- } |
- |
- return result; |
-} |
- |
-int MountNodeHtml5Fs::Truncate(size_t size) { |
- int32_t result = mount_->ppapi()->GetFileIoInterface()->SetLength( |
- fileio_resource_, size, PP_BlockUntilComplete()); |
- if (result != PP_OK) { |
- errno = PPErrorToErrno(result); |
- return -1; |
- } |
- |
- 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; |
-} |
- |
-size_t MountNodeHtml5Fs::GetSize() { |
- 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; |
- } |
- |
- return static_cast<size_t>(info.size); |
-} |
- |
-MountNodeHtml5Fs::MountNodeHtml5Fs(Mount* mount, PP_Resource fileref_resource) |
- : MountNode(mount), |
- fileref_resource_(fileref_resource), |
- fileio_resource_(0) { |
-} |
- |
-bool MountNodeHtml5Fs::Init(int perm) { |
- if (!MountNode::Init(Mount::OpenModeToPermission(perm))) |
- return false; |
- |
- fileio_resource_= mount_->ppapi()->GetFileIoInterface()->Create( |
- mount_->ppapi()->GetInstance()); |
- if (!fileio_resource_) |
- return false; |
- |
- 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; |
-} |
- |
-void MountNodeHtml5Fs::Destroy() { |
- FSync(); |
- |
- if (fileio_resource_) { |
- mount_->ppapi()->GetFileIoInterface()->Close(fileio_resource_); |
- mount_->ppapi()->ReleaseResource(fileio_resource_); |
- } |
- |
- mount_->ppapi()->ReleaseResource(fileref_resource_); |
- fileio_resource_ = 0; |
- fileref_resource_ = 0; |
- MountNode::Destroy(); |
-} |