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

Unified Diff: native_client_sdk/src/libraries/nacl_mounts/mount_dev.cc

Issue 11592003: Add support for simple run of "main" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Replace missing stdio Created 8 years 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_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
index 5d439893f7eac504d9a454deda95f1bb83b940de..83925da6e76262fd17d12ae2262359fda4abe6a7 100644
--- a/native_client_sdk/src/libraries/nacl_mounts/mount_dev.cc
+++ b/native_client_sdk/src/libraries/nacl_mounts/mount_dev.cc
@@ -6,12 +6,13 @@
#define _CRT_RAND_S
#endif
-#include "nacl_mounts/mount_dev.h"
#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__)
@@ -36,6 +37,25 @@ class NullNode : public MountNode {
virtual int Write(size_t offs, const void* buf, size_t count);
};
+class ConsoleNode : public NullNode {
+ public:
+ ConsoleNode(Mount* mount, int ino, int dev, PP_LogLevel level);
+
+ virtual int Write(size_t offs, const void* buf, size_t count);
+
+private:
+ PP_LogLevel level_;
+};
+
+
+class TtyNode : public NullNode {
+ public:
+ TtyNode(Mount* mount, int ino, int dev);
+
+ virtual int Write(size_t offs, const void* buf, size_t count);
+};
+
+
class ZeroNode : public MountNode {
public:
ZeroNode(Mount* mount, int ino, int dev);
@@ -70,6 +90,45 @@ int NullNode::Write(size_t offs, const void* buf, size_t count) {
return count;
}
+ConsoleNode::ConsoleNode(Mount* mount, int ino, int dev, PP_LogLevel level)
+ : NullNode(mount, ino, dev),
+ level_(level) {
+}
+
+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, int ino, int dev)
+ : NullNode(mount, ino, dev) {
+}
+
+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, int ino, int dev)
: MountNode(mount, ino, dev) {
}
@@ -132,6 +191,8 @@ int UrandomNode::Write(size_t offs, const void* buf, size_t count) {
return count;
}
+
+
} // namespace
MountNode *MountDev::Open(const Path& path, int mode) {
@@ -177,7 +238,12 @@ int MountDev::Remove(const Path& path) {
MountDev::MountDev()
: null_node_(NULL),
zero_node_(NULL),
- random_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) {
@@ -191,10 +257,27 @@ bool MountDev::Init(int dev, StringMap_t& args, PepperInterface* ppapi) {
root_->AddChild("/zero", zero_node_);
random_node_ = new UrandomNode(this, 4, dev_);
root_->AddChild("/urandom", random_node_);
+
+ console0_node_ = new ConsoleNode(this, 5, dev_, PP_LOGLEVEL_TIP);
+ root_->AddChild("/console0", console0_node_);
+ console1_node_ = new ConsoleNode(this, 6, dev_, PP_LOGLEVEL_LOG);
+ root_->AddChild("/console1", console1_node_);
+ console2_node_ = new ConsoleNode(this, 7, dev_, PP_LOGLEVEL_WARNING);
+ root_->AddChild("/console2", console2_node_);
+ console3_node_ = new ConsoleNode(this, 8, dev_, PP_LOGLEVEL_ERROR);
+ root_->AddChild("/console3", console3_node_);
+
+ tty_node_ = new TtyNode(this, 9, dev_);
+ 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_);

Powered by Google App Engine
This is Rietveld 408576698