unix.groups: Return an empty sequence if the user in 'user user-groups' doesn't exist.

db4
Doug Coleman 2012-02-02 19:58:24 -08:00
parent 38d09743e0
commit daf13a0f4f
2 changed files with 10 additions and 3 deletions

View File

@ -40,3 +40,6 @@ IN: unix.groups.tests
{ f }
[ "root" user-groups empty? ] unit-test
{ t }
[ "29032039029302930290390329uafjklajsdfkasjflaskjflsadkjfroot" user-groups empty? ] unit-test

View File

@ -70,9 +70,13 @@ ERROR: no-group string ;
[ 4 grouping:group ] dip head-slice [ uint deref group-name ] map ;
: (user-groups) ( string -- seq )
dup user-passwd gid>> 64 [ 4 * <byte-array> ] keep
int <ref> [ [ unix.ffi:getgrouplist ] unix-system-call drop ] 2keep
int deref >groups ;
dup user-passwd [
gid>> 64 [ 4 * <byte-array> ] keep
int <ref> [ [ unix.ffi:getgrouplist ] unix-system-call drop ] 2keep
int deref >groups
] [
drop { }
] if* ;
PRIVATE>