os: add os.endianness() function
authorNathan Rajlich <nathan@tootallnate.net>
Thu, 8 Nov 2012 20:31:45 +0000 (12:31 -0800)
committerNathan Rajlich <nathan@tootallnate.net>
Thu, 8 Nov 2012 20:31:45 +0000 (12:31 -0800)
doc/api/os.markdown
lib/os.js
src/node_os.cc
test/simple/test-os.js

index b5fffcf..fac97d3 100644 (file)
@@ -10,6 +10,10 @@ Use `require('os')` to access this module.
 
 Returns the operating system's default directory for temp files.
 
+## os.endianness()
+
+Returns the endianness of the CPU. Possible values are `"BE"` or `"LE"`.
+
 ## os.hostname()
 
 Returns the hostname of the operating system.
index 1fe8731..612a0e4 100644 (file)
--- a/lib/os.js
+++ b/lib/os.js
@@ -22,6 +22,7 @@
 var binding = process.binding('os');
 var util = require('util');
 
+exports.endianness = binding.getEndianness;
 exports.hostname = binding.getHostname;
 exports.loadavg = binding.getLoadAvg;
 exports.uptime = binding.getUptime;
index c09458e..af363d3 100644 (file)
@@ -41,6 +41,14 @@ namespace node {
 
 using namespace v8;
 
+static Handle<Value> GetEndianness(const Arguments& args) {
+  HandleScope scope;
+  int i = 1;
+  bool big = (*(char *)&i) == 0;
+  Local<String> endianness = String::New(big ? "BE" : "LE");
+  return scope.Close(endianness);
+}
+
 static Handle<Value> GetHostname(const Arguments& args) {
   HandleScope scope;
   char s[255];
@@ -242,6 +250,7 @@ static Handle<Value> GetInterfaceAddresses(const Arguments& args) {
 void OS::Initialize(v8::Handle<v8::Object> target) {
   HandleScope scope;
 
+  NODE_SET_METHOD(target, "getEndianness", GetEndianness);
   NODE_SET_METHOD(target, "getHostname", GetHostname);
   NODE_SET_METHOD(target, "getLoadAvg", GetLoadAvg);
   NODE_SET_METHOD(target, "getUptime", GetUptime);
index b141f00..5927832 100644 (file)
@@ -39,6 +39,10 @@ assert.equal(os.tmpDir(), '/temp');
 process.env.TEMP = '';
 assert.equal(os.tmpDir(), t);
 
+var endianness = os.endianness();
+console.log('endianness = %s', endianness);
+assert.ok(/[BL]E/.test(endianness));
+
 var hostname = os.hostname();
 console.log('hostname = %s', hostname);
 assert.ok(hostname.length > 0);