os: migrate node_os.cc to internal/errors

PR-URL: https://github.com/nodejs/node/pull/16567
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
This commit is contained in:
James M Snell 2017-10-27 16:27:16 -07:00
parent c3dc0e0d75
commit 056b858e57
2 changed files with 48 additions and 12 deletions

View File

@ -27,21 +27,43 @@ const { deprecate } = require('internal/util');
const { getCIDRSuffix } = require('internal/os');
const isWindows = process.platform === 'win32';
const errors = require('internal/errors');
const {
getCPUs,
getFreeMem,
getHomeDirectory,
getHostname,
getInterfaceAddresses,
getHomeDirectory: _getHomeDirectory,
getHostname: _getHostname,
getInterfaceAddresses: _getInterfaceAddresses,
getLoadAvg,
getOSRelease,
getOSType,
getOSRelease: _getOSRelease,
getOSType: _getOSType,
getTotalMem,
getUserInfo,
getUserInfo: _getUserInfo,
getUptime,
isBigEndian
} = process.binding('os');
function getCheckedFunction(fn) {
return function checkError(...args) {
const ctx = {};
const ret = fn(...args, ctx);
if (ret === undefined) {
const err = new errors.SystemError(ctx);
Error.captureStackTrace(err, checkError);
throw err;
}
return ret;
};
}
const getHomeDirectory = getCheckedFunction(_getHomeDirectory);
const getHostname = getCheckedFunction(_getHostname);
const getInterfaceAddresses = getCheckedFunction(_getInterfaceAddresses);
const getOSRelease = getCheckedFunction(_getOSRelease);
const getOSType = getCheckedFunction(_getOSType);
const getUserInfo = getCheckedFunction(_getUserInfo);
getFreeMem[Symbol.toPrimitive] = () => getFreeMem();
getHostname[Symbol.toPrimitive] = () => getHostname();
getHomeDirectory[Symbol.toPrimitive] = () => getHomeDirectory();

View File

@ -72,7 +72,9 @@ static void GetHostname(const FunctionCallbackInfo<Value>& args) {
#else // __MINGW32__
int errorno = WSAGetLastError();
#endif // __POSIX__
return env->ThrowErrnoException(errorno, "gethostname");
CHECK_GE(args.Length(), 1);
env->CollectExceptionInfo(args[args.Length() - 1], errorno, "gethostname");
return args.GetReturnValue().SetUndefined();
}
buf[sizeof(buf) - 1] = '\0';
@ -87,7 +89,9 @@ static void GetOSType(const FunctionCallbackInfo<Value>& args) {
#ifdef __POSIX__
struct utsname info;
if (uname(&info) < 0) {
return env->ThrowErrnoException(errno, "uname");
CHECK_GE(args.Length(), 1);
env->CollectExceptionInfo(args[args.Length() - 1], errno, "uname");
return args.GetReturnValue().SetUndefined();
}
rval = info.sysname;
#else // __MINGW32__
@ -105,7 +109,9 @@ static void GetOSRelease(const FunctionCallbackInfo<Value>& args) {
#ifdef __POSIX__
struct utsname info;
if (uname(&info) < 0) {
return env->ThrowErrnoException(errno, "uname");
CHECK_GE(args.Length(), 1);
env->CollectExceptionInfo(args[args.Length() - 1], errno, "uname");
return args.GetReturnValue().SetUndefined();
}
# ifdef _AIX
char release[256];
@ -242,7 +248,10 @@ static void GetInterfaceAddresses(const FunctionCallbackInfo<Value>& args) {
if (err == UV_ENOSYS) {
return args.GetReturnValue().Set(ret);
} else if (err) {
return env->ThrowUVException(err, "uv_interface_addresses");
CHECK_GE(args.Length(), 1);
env->CollectUVExceptionInfo(args[args.Length() - 1], errno,
"uv_interface_addresses");
return args.GetReturnValue().SetUndefined();
}
for (i = 0; i < count; i++) {
@ -319,7 +328,9 @@ static void GetHomeDirectory(const FunctionCallbackInfo<Value>& args) {
const int err = uv_os_homedir(buf, &len);
if (err) {
return env->ThrowUVException(err, "uv_os_homedir");
CHECK_GE(args.Length(), 1);
env->CollectUVExceptionInfo(args[args.Length() - 1], err, "uv_os_homedir");
return args.GetReturnValue().SetUndefined();
}
Local<String> home = String::NewFromUtf8(env->isolate(),
@ -351,7 +362,10 @@ static void GetUserInfo(const FunctionCallbackInfo<Value>& args) {
const int err = uv_os_get_passwd(&pwd);
if (err) {
return env->ThrowUVException(err, "uv_os_get_passwd");
CHECK_GE(args.Length(), 2);
env->CollectUVExceptionInfo(args[args.Length() - 1], err,
"uv_os_get_passwd");
return args.GetReturnValue().SetUndefined();
}
Local<Value> error;