os.tmpdir() began stripping trailing slashes in
b57cc51d8d. This causes problems if
the temp directory is simply '/'. It also stripped trailing
slashes without first determining which slash type is used by
the current operating system. This commit only strips trailing
slashes if another character precedes the slash. On Windows, it
checks for ':', as not to strip slashes from something like 'C:\'.
It also only strips slashes that are appropriate for the user's
operating system.
Fixes: https://github.com/iojs/io.js/issues/1669
PR-URL: https://github.com/iojs/io.js/pull/1673
Reviewed-By: Rod Vagg <rod@vagg.org>
Reviewed-By: Christian Tellnes <christian@tellnes.no>
56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
const binding = process.binding('os');
|
|
const util = require('util');
|
|
const isWindows = process.platform === 'win32';
|
|
|
|
exports.hostname = binding.getHostname;
|
|
exports.loadavg = binding.getLoadAvg;
|
|
exports.uptime = binding.getUptime;
|
|
exports.freemem = binding.getFreeMem;
|
|
exports.totalmem = binding.getTotalMem;
|
|
exports.cpus = binding.getCPUs;
|
|
exports.type = binding.getOSType;
|
|
exports.release = binding.getOSRelease;
|
|
exports.networkInterfaces = binding.getInterfaceAddresses;
|
|
|
|
exports.arch = function() {
|
|
return process.arch;
|
|
};
|
|
|
|
exports.platform = function() {
|
|
return process.platform;
|
|
};
|
|
|
|
const trailingSlashRe = isWindows ? /[^:]\\$/
|
|
: /.\/$/;
|
|
|
|
exports.tmpdir = function() {
|
|
var path;
|
|
if (isWindows) {
|
|
path = process.env.TEMP ||
|
|
process.env.TMP ||
|
|
(process.env.SystemRoot || process.env.windir) + '\\temp';
|
|
} else {
|
|
path = process.env.TMPDIR ||
|
|
process.env.TMP ||
|
|
process.env.TEMP ||
|
|
'/tmp';
|
|
}
|
|
if (trailingSlashRe.test(path))
|
|
path = path.slice(0, -1);
|
|
return path;
|
|
};
|
|
|
|
exports.tmpDir = exports.tmpdir;
|
|
|
|
exports.getNetworkInterfaces = util.deprecate(function() {
|
|
return exports.networkInterfaces();
|
|
}, 'getNetworkInterfaces is now called `os.networkInterfaces`.');
|
|
|
|
exports.EOL = isWindows ? '\r\n' : '\n';
|
|
|
|
if (binding.isBigEndian)
|
|
exports.endianness = function() { return 'BE'; };
|
|
else
|
|
exports.endianness = function() { return 'LE'; };
|