diff options
Diffstat (limited to 'toys/posix/id.c')
-rw-r--r-- | toys/posix/id.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/toys/posix/id.c b/toys/posix/id.c index 48146600..dbcf9a15 100644 --- a/toys/posix/id.c +++ b/toys/posix/id.c @@ -66,7 +66,7 @@ struct group *xgetgrgid(gid_t gid) return group; } -void id_main(void) +void do_id(char *username) { int flags, i, ngroups, cmd_groups = toys.which->name[0] == 'g'; struct passwd *pw; @@ -80,9 +80,9 @@ void id_main(void) flags = toys.optflags; // check if a username is given - if (*toys.optargs) { - if (!(pw = getpwnam(*toys.optargs))) - error_exit("no such user '%s'", *toys.optargs); + if (username) { + if (!(pw = getpwnam(username))) + error_exit("no such user '%s'", username); uid = euid = pw->pw_uid; gid = egid = pw->pw_gid; if (cmd_groups) @@ -116,7 +116,8 @@ void id_main(void) groups = (gid_t *)toybuf; i = sizeof(toybuf)/sizeof(gid_t); - ngroups = *toys.optargs ? getgrouplist(*toys.optargs, gid, groups, &i) : getgroups(i, groups); + ngroups = username ? getgrouplist(username, gid, groups, &i) + : getgroups(i, groups); if (0 >= ngroups) perror_exit(0); for (i = 0;;) { @@ -128,3 +129,9 @@ void id_main(void) } xputc('\n'); } + +void id_main(void) +{ + if (toys.optc) while(*toys.optargs) do_id(*toys.optargs++); + else do_id(NULL); +} |