node_stdio stub for windows
authorBert Belder <bertbelder@gmail.com>
Wed, 24 Nov 2010 23:59:40 +0000 (00:59 +0100)
committerBert Belder <bertbelder@gmail.com>
Mon, 20 Dec 2010 22:50:31 +0000 (23:50 +0100)
src/node_stdio.cc
src/node_stdio_win32.cc [new file with mode: 0644]

index ad09835..c2f5cbb 100644 (file)
@@ -1,3 +1,9 @@
+#ifdef __MINGW32__
+# include "node_stdio_win32.cc"
+#endif
+
+#ifdef __POSIX__
+
 #include <node_stdio.h>
 #include <node_events.h>
 
@@ -292,3 +298,5 @@ void Stdio::Initialize(v8::Handle<v8::Object> target) {
 }  // namespace node
 
 NODE_MODULE(node_stdio, node::Stdio::Initialize);
+
+#endif // __POSIX__
diff --git a/src/node_stdio_win32.cc b/src/node_stdio_win32.cc
new file mode 100644 (file)
index 0000000..c609fdd
--- /dev/null
@@ -0,0 +1,68 @@
+#include <node_stdio.h>\r
+#include <platform_win32.h>\r
+#include <v8.h>\r
+\r
+using namespace v8;\r
+namespace node {\r
+\r
+\r
+NO_IMPL(void, Stdio::DisableRawMode, , int fd);\r
+NO_IMPL(void, Stdio::Flush, , );\r
+NO_IMPL(static Handle<Value>, OpenStdin, RET_V8UNDEFINED, const Arguments& args);\r
+NO_IMPL(static Handle<Value>, IsStdinBlocking, RET_V8FALSE, const Arguments& args);\r
+NO_IMPL(static Handle<Value>, SetRawMode, RET_V8TRUE, const Arguments& args);\r
+NO_IMPL(static Handle<Value>, GetColumns, RET_V8INT(80), const Arguments& args);\r
+NO_IMPL(static Handle<Value>, GetRows, RET_V8INT(25), const Arguments& args);\r
+NO_IMPL(static Handle<Value>, IsATTY, RET_V8FALSE, const Arguments& args);\r
+\r
+\r
+/*\r
+ * STDERR should always be blocking & utf-8\r
+ * TODO: check correctness\r
+ */\r
+static Handle<Value>\r
+WriteError (const Arguments& args)\r
+{\r
+  HandleScope scope;\r
+\r
+  if (args.Length() < 1)\r
+    return Undefined();\r
+\r
+  String::Utf8Value msg(args[0]->ToString());\r
+\r
+  fprintf(stderr, "%s", (char*)*msg);\r
+\r
+  return Undefined();\r
+}\r
+\r
+\r
+/*\r
+ * Assume that stdout is never blocking on windows\r
+ * TODO: check correctness and really implement this\r
+ */\r
+static Handle<Value>\r
+IsStdoutBlocking (const Arguments& args)\r
+{\r
+  return True();\r
+}\r
+\r
+\r
+void Stdio::Initialize(v8::Handle<v8::Object> target) {\r
+  target->Set(String::NewSymbol("stdoutFD"), Integer::New(STDOUT_FILENO));\r
+  target->Set(String::NewSymbol("stderrFD"), Integer::New(STDERR_FILENO));\r
+  target->Set(String::NewSymbol("stdinFD"), Integer::New(STDIN_FILENO));\r
+\r
+  NODE_SET_METHOD(target, "writeError", WriteError);\r
+  NODE_SET_METHOD(target, "openStdin", OpenStdin);\r
+  NODE_SET_METHOD(target, "isStdoutBlocking", IsStdoutBlocking);\r
+  NODE_SET_METHOD(target, "isStdinBlocking", IsStdinBlocking);\r
+  NODE_SET_METHOD(target, "setRawMode", SetRawMode);\r
+  NODE_SET_METHOD(target, "getColumns", GetColumns);\r
+  NODE_SET_METHOD(target, "getRows", GetRows);\r
+  NODE_SET_METHOD(target, "isatty", IsATTY);\r
+}\r
+\r
+\r
+} // namespace node\r
+\r
+NODE_MODULE(node_stdio, node::Stdio::Initialize);\r