Returns the operating system's default directory for temporary files.
+## os.homedir()
+
+Returns the home directory of the current user.
+
## os.endianness()
Returns the endianness of the CPU. Possible values are `'BE'` for big endian
exports.type = binding.getOSType;
exports.release = binding.getOSRelease;
exports.networkInterfaces = binding.getInterfaceAddresses;
+exports.homedir = binding.getHomeDirectory;
+
exports.arch = function() {
return process.arch;
#endif // __MINGW32__
#ifdef __POSIX__
+# include <limits.h> // PATH_MAX on Solaris.
# include <netdb.h> // MAXHOSTNAMELEN on Solaris.
# include <unistd.h> // gethostname, sysconf
# include <sys/param.h> // MAXHOSTNAMELEN on Linux and the BSDs.
}
+static void GetHomeDirectory(const FunctionCallbackInfo<Value>& args) {
+ Environment* env = Environment::GetCurrent(args);
+ char buf[PATH_MAX];
+
+ size_t len = sizeof(buf);
+ const int err = uv_os_homedir(buf, &len);
+
+ if (err) {
+ return env->ThrowUVException(err, "uv_os_homedir");
+ }
+
+ Local<String> home = String::NewFromUtf8(env->isolate(),
+ buf,
+ String::kNormalString,
+ len);
+ args.GetReturnValue().Set(home);
+}
+
+
void Initialize(Handle<Object> target,
Handle<Value> unused,
Handle<Context> context) {
env->SetMethod(target, "getOSType", GetOSType);
env->SetMethod(target, "getOSRelease", GetOSRelease);
env->SetMethod(target, "getInterfaceAddresses", GetInterfaceAddresses);
+ env->SetMethod(target, "getHomeDirectory", GetHomeDirectory);
target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "isBigEndian"),
Boolean::New(env->isolate(), IsBigEndian()));
}
exports.libDir = path.join(exports.testDir, '../lib');
exports.tmpDirName = 'tmp';
exports.PORT = +process.env.NODE_COMMON_PORT || 12346;
+exports.isWindows = process.platform === 'win32';
if (process.env.TEST_THREAD_ID) {
// Distribute ports in parallel tests
--- /dev/null
+'use strict';
+var common = require('../common');
+var assert = require('assert');
+var cp = require('child_process');
+var os = require('os');
+var path = require('path');
+
+
+if (process.argv[2] === 'child') {
+ if (common.isWindows)
+ assert.equal(process.env.USERPROFILE, undefined);
+ else
+ assert.equal(process.env.HOME, undefined);
+
+ var home = os.homedir();
+
+ assert.ok(typeof home === 'string');
+ assert.ok(home.indexOf(path.sep) !== -1);
+} else {
+ if (common.isWindows)
+ delete process.env.USERPROFILE;
+ else
+ delete process.env.HOME;
+
+ var child = cp.spawnSync(process.execPath, [__filename, 'child'], {
+ env: process.env
+ });
+
+ assert.equal(child.status, 0);
+}
var common = require('../common');
var assert = require('assert');
var os = require('os');
+var path = require('path');
process.env.TMPDIR = '/tmpdir';
process.env.TMP = '/tmp';
process.env.TEMP = '/temp';
-if (process.platform === 'win32') {
+if (common.isWindows) {
assert.equal(os.tmpdir(), '/temp');
process.env.TEMP = '';
assert.equal(os.tmpdir(), '/tmp');
var EOL = os.EOL;
assert.ok(EOL.length > 0);
+
+
+var home = os.homedir();
+
+console.log('homedir = ' + home);
+assert.ok(typeof home === 'string');
+assert.ok(home.indexOf(path.sep) !== -1);
+
+if (common.isWindows && process.env.USERPROFILE) {
+ assert.equal(home, process.env.USERPROFILE);
+ delete process.env.USERPROFILE;
+ assert.ok(os.homedir().indexOf(path.sep) !== -1);
+ process.env.USERPROFILE = home;
+} else if (!common.isWindows && process.env.HOME) {
+ assert.equal(home, process.env.HOME);
+ delete process.env.HOME;
+ assert.ok(os.homedir().indexOf(path.sep) !== -1);
+ process.env.HOME = home;
+}