Index: native_client_sdk/src/libraries/nacl_mounts/mount_dev.cc |
diff --git a/native_client_sdk/src/libraries/nacl_mounts/mount_dev.cc b/native_client_sdk/src/libraries/nacl_mounts/mount_dev.cc |
deleted file mode 100644 |
index a85f8de24e3b461884cc2fafc4885293cdc62f8a..0000000000000000000000000000000000000000 |
--- a/native_client_sdk/src/libraries/nacl_mounts/mount_dev.cc |
+++ /dev/null |
@@ -1,282 +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. |
- */ |
-#if defined(WIN32) |
-#define _CRT_RAND_S |
-#endif |
- |
-#include <errno.h> |
-#include <fcntl.h> |
-#include <string.h> |
-#include "nacl_mounts/mount_dev.h" |
-#include "nacl_mounts/mount_node.h" |
-#include "nacl_mounts/mount_node_dir.h" |
-#include "nacl_mounts/pepper_interface.h" |
-#include "utils/auto_lock.h" |
- |
-#if defined(__native_client__) |
-# include <irt.h> |
-#elif defined(WIN32) |
-# include <stdlib.h> |
-#endif |
- |
-namespace { |
- |
-void ReleaseAndNullNode(MountNode** node) { |
- if (*node) |
- (*node)->Release(); |
- *node = NULL; |
-} |
- |
-class NullNode : public MountNode { |
- public: |
- explicit NullNode(Mount* mount); |
- |
- virtual int Read(size_t offs, void* buf, size_t count); |
- virtual int Write(size_t offs, const void* buf, size_t count); |
-}; |
- |
-class ConsoleNode : public NullNode { |
- public: |
- ConsoleNode(Mount* mount, PP_LogLevel level); |
- |
- virtual int Write(size_t offs, const void* buf, size_t count); |
- |
-private: |
- PP_LogLevel level_; |
-}; |
- |
- |
-class TtyNode : public NullNode { |
- public: |
- explicit TtyNode(Mount* mount); |
- |
- virtual int Write(size_t offs, const void* buf, size_t count); |
-}; |
- |
- |
-class ZeroNode : public MountNode { |
- public: |
- explicit ZeroNode(Mount* mount); |
- |
- virtual int Read(size_t offs, void* buf, size_t count); |
- virtual int Write(size_t offs, const void* buf, size_t count); |
-}; |
- |
-class UrandomNode : public MountNode { |
- public: |
- explicit UrandomNode(Mount* mount); |
- |
- virtual int Read(size_t offs, void* buf, size_t count); |
- virtual int Write(size_t offs, const void* buf, size_t count); |
- |
- private: |
-#if defined(__native_client__) |
- nacl_irt_random random_interface_; |
- bool interface_ok_; |
-#endif |
-}; |
- |
-NullNode::NullNode(Mount* mount) |
- : MountNode(mount) { |
- stat_.st_mode = S_IFCHR; |
-} |
- |
-int NullNode::Read(size_t offs, void* buf, size_t count) { |
- return 0; |
-} |
- |
-int NullNode::Write(size_t offs, const void* buf, size_t count) { |
- return count; |
-} |
- |
-ConsoleNode::ConsoleNode(Mount* mount, PP_LogLevel level) |
- : NullNode(mount), |
- level_(level) { |
- stat_.st_mode = S_IFCHR; |
-} |
- |
-int ConsoleNode::Write(size_t offs, const void* buf, size_t count) { |
- ConsoleInterface* con_intr = mount_->ppapi()->GetConsoleInterface(); |
- VarInterface* var_intr = mount_->ppapi()->GetVarInterface(); |
- |
- if (var_intr && con_intr) { |
- const char* data = static_cast<const char *>(buf); |
- uint32_t len = static_cast<uint32_t>(count); |
- struct PP_Var val = var_intr->VarFromUtf8(data, len); |
- con_intr->Log(mount_->ppapi()->GetInstance(), level_, val); |
- return count; |
- } |
- return 0; |
-} |
- |
- |
-TtyNode::TtyNode(Mount* mount) |
- : NullNode(mount) { |
-} |
- |
-int TtyNode::Write(size_t offs, const void* buf, size_t count) { |
- MessagingInterface* msg_intr = mount_->ppapi()->GetMessagingInterface(); |
- VarInterface* var_intr = mount_->ppapi()->GetVarInterface(); |
- |
- if (var_intr && msg_intr) { |
- const char* data = static_cast<const char *>(buf); |
- uint32_t len = static_cast<uint32_t>(count); |
- struct PP_Var val = var_intr->VarFromUtf8(data, len); |
- msg_intr->PostMessage(mount_->ppapi()->GetInstance(), val); |
- return count; |
- } |
- return 0; |
-} |
- |
- |
-ZeroNode::ZeroNode(Mount* mount) |
- : MountNode(mount) { |
- stat_.st_mode = S_IFCHR; |
-} |
- |
-int ZeroNode::Read(size_t offs, void* buf, size_t count) { |
- memset(buf, 0, count); |
- return count; |
-} |
- |
-int ZeroNode::Write(size_t offs, const void* buf, size_t count) { |
- return count; |
-} |
- |
-UrandomNode::UrandomNode(Mount* mount) |
- : MountNode(mount) { |
- stat_.st_mode = S_IFCHR; |
-#if defined(__native_client__) |
- size_t result = nacl_interface_query(NACL_IRT_RANDOM_v0_1, &random_interface_, |
- sizeof(random_interface_)); |
- interface_ok_ = result != 0; |
-#endif |
-} |
- |
-int UrandomNode::Read(size_t offs, void* buf, size_t count) { |
-#if defined(__native_client__) |
- if (interface_ok_) { |
- size_t nread; |
- int result = (*random_interface_.get_random_bytes)(buf, count, &nread); |
- if (result != 0) { |
- errno = result; |
- return 0; |
- } |
- |
- return count; |
- } |
- |
- errno = EBADF; |
- return 0; |
-#elif defined(WIN32) |
- char* out = static_cast<char*>(buf); |
- size_t bytes_left = count; |
- while (bytes_left) { |
- unsigned int random_int; |
- errno_t err = rand_s(&random_int); |
- if (err) { |
- errno = err; |
- return count - bytes_left; |
- } |
- |
- int bytes_to_copy = std::min(bytes_left, sizeof(random_int)); |
- memcpy(out, &random_int, bytes_to_copy); |
- out += bytes_to_copy; |
- bytes_left -= bytes_to_copy; |
- } |
- |
- return count; |
-#endif |
-} |
- |
-int UrandomNode::Write(size_t offs, const void* buf, size_t count) { |
- return count; |
-} |
- |
- |
- |
-} // namespace |
- |
-MountNode *MountDev::Open(const Path& path, int mode) { |
- AutoLock lock(&lock_); |
- |
- // Don't allow creating any files. |
- if (mode & O_CREAT) |
- return NULL; |
- |
- MountNode* node = root_->FindChild(path.Join()); |
- if (node) |
- node->Acquire(); |
- return node; |
-} |
- |
-int MountDev::Unlink(const Path& path) { |
- errno = EINVAL; |
- return -1; |
-} |
- |
-int MountDev::Mkdir(const Path& path, int permissions) { |
- errno = EINVAL; |
- return -1; |
-} |
- |
-int MountDev::Rmdir(const Path& path) { |
- errno = EINVAL; |
- return -1; |
-} |
- |
-int MountDev::Remove(const Path& path) { |
- errno = EINVAL; |
- return -1; |
-} |
- |
-MountDev::MountDev() |
- : null_node_(NULL), |
- zero_node_(NULL), |
- random_node_(NULL), |
- console0_node_(NULL), |
- console1_node_(NULL), |
- console2_node_(NULL), |
- console3_node_(NULL), |
- tty_node_(NULL) { |
-} |
- |
-bool MountDev::Init(int dev, StringMap_t& args, PepperInterface* ppapi) { |
- if (!Mount::Init(dev, args, ppapi)) |
- return false; |
- |
- root_ = new MountNodeDir(this); |
- null_node_ = new NullNode(this); |
- root_->AddChild("/null", null_node_); |
- zero_node_ = new ZeroNode(this); |
- root_->AddChild("/zero", zero_node_); |
- random_node_ = new UrandomNode(this); |
- root_->AddChild("/urandom", random_node_); |
- |
- console0_node_ = new ConsoleNode(this, PP_LOGLEVEL_TIP); |
- root_->AddChild("/console0", console0_node_); |
- console1_node_ = new ConsoleNode(this, PP_LOGLEVEL_LOG); |
- root_->AddChild("/console1", console1_node_); |
- console2_node_ = new ConsoleNode(this, PP_LOGLEVEL_WARNING); |
- root_->AddChild("/console2", console2_node_); |
- console3_node_ = new ConsoleNode(this, PP_LOGLEVEL_ERROR); |
- root_->AddChild("/console3", console3_node_); |
- |
- tty_node_ = new TtyNode(this); |
- root_->AddChild("/tty", tty_node_); |
- return true; |
-} |
- |
-void MountDev::Destroy() { |
- ReleaseAndNullNode(&tty_node_); |
- ReleaseAndNullNode(&console3_node_); |
- ReleaseAndNullNode(&console2_node_); |
- ReleaseAndNullNode(&console1_node_); |
- ReleaseAndNullNode(&console0_node_); |
- ReleaseAndNullNode(&random_node_); |
- ReleaseAndNullNode(&zero_node_); |
- ReleaseAndNullNode(&null_node_); |
- ReleaseAndNullNode(&root_); |
-} |