Skip to content

Commit 86d6a0f

Browse files
Add userInfo() (#11)
1 parent 3f09203 commit 86d6a0f

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

binding.c

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,67 @@ bare_os_hostname(js_env_t *env, js_callback_info_t *info) {
234234
return result;
235235
}
236236

237+
static js_value_t *
238+
bare_os_user_info(js_env_t *env, js_callback_info_t *info) {
239+
int err;
240+
241+
uv_passwd_t pwd;
242+
err = uv_os_get_passwd(&pwd);
243+
if (err != 0) {
244+
js_throw_error(env, uv_err_name(err), uv_strerror(err));
245+
return NULL;
246+
}
247+
248+
js_value_t *result;
249+
err = js_create_object(env, &result);
250+
assert(err == 0);
251+
252+
js_value_t *uid;
253+
err = js_create_int32(env, (int32_t) pwd.uid, &uid);
254+
assert(err == 0);
255+
256+
err = js_set_named_property(env, result, "uid", uid);
257+
assert(err == 0);
258+
259+
js_value_t *gid;
260+
err = js_create_int32(env, (int32_t) pwd.gid, &gid);
261+
assert(err == 0);
262+
263+
err = js_set_named_property(env, result, "gid", gid);
264+
assert(err == 0);
265+
266+
js_value_t *username;
267+
err = js_create_string_utf8(env, (utf8_t *) pwd.username, strlen(pwd.username), &username);
268+
assert(err == 0);
269+
270+
err = js_set_named_property(env, result, "username", username);
271+
assert(err == 0);
272+
273+
js_value_t *homedir;
274+
err = js_create_string_utf8(env, (utf8_t *) pwd.homedir, strlen(pwd.homedir), &homedir);
275+
assert(err == 0);
276+
277+
err = js_set_named_property(env, result, "homedir", homedir);
278+
assert(err == 0);
279+
280+
js_value_t *shell;
281+
282+
if (pwd.shell == NULL) {
283+
err = js_get_null(env, &shell);
284+
assert(err == 0);
285+
} else {
286+
err = js_create_string_utf8(env, (utf8_t *) pwd.shell, -1, &shell);
287+
assert(err == 0);
288+
}
289+
290+
err = js_set_named_property(env, result, "shell", shell);
291+
assert(err == 0);
292+
293+
uv_os_free_passwd(&pwd);
294+
295+
return result;
296+
}
297+
237298
static js_value_t *
238299
bare_os_kill(js_env_t *env, js_callback_info_t *info) {
239300
int err;
@@ -889,6 +950,7 @@ bare_os_exports(js_env_t *env, js_value_t *exports) {
889950
V("hasEnv", bare_os_get_env)
890951
V("setEnv", bare_os_set_env)
891952
V("unsetEnv", bare_os_unset_env)
953+
V("userInfo", bare_os_user_info)
892954
#undef V
893955

894956
const union {

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ exports.chdir = binding.chdir
2626
exports.tmpdir = binding.tmpdir
2727
exports.homedir = binding.homedir
2828
exports.hostname = binding.hostname
29+
exports.userInfo = binding.userInfo
2930

3031
exports.kill = function kill(pid, signal = constants.signals.SIGTERM) {
3132
if (typeof signal === 'string') {

test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,7 @@ test('load avg', (t) => {
104104
test('cpus', (t) => {
105105
t.comment(os.cpus())
106106
})
107+
108+
test('user info', (t) => {
109+
t.comment(os.userInfo())
110+
})

0 commit comments

Comments
 (0)