Skip to content

Commit

Permalink
os: migrate node_os.cc to internal/errors
Browse files Browse the repository at this point in the history
PR-URL: #16567
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
  • Loading branch information
jasnell committed Nov 2, 2017
1 parent c3dc0e0 commit 056b858
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 12 deletions.
34 changes: 28 additions & 6 deletions lib/os.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
26 changes: 20 additions & 6 deletions src/node_os.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand All @@ -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__
Expand All @@ -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];
Expand Down Expand Up @@ -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++) {
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 056b858

Please sign in to comment.