From daf13a0f4f7192f1350107c1a4cba32cb686d431 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Thu, 2 Feb 2012 19:58:24 -0800
Subject: [PATCH] unix.groups: Return an empty sequence if the user in 'user
 user-groups' doesn't exist.

---
 basis/unix/groups/groups-tests.factor |  3 +++
 basis/unix/groups/groups.factor       | 10 +++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/basis/unix/groups/groups-tests.factor b/basis/unix/groups/groups-tests.factor
index 4fd633f8cb..53a8a593ea 100644
--- a/basis/unix/groups/groups-tests.factor
+++ b/basis/unix/groups/groups-tests.factor
@@ -40,3 +40,6 @@ IN: unix.groups.tests
 
 { f }
 [ "root" user-groups empty? ] unit-test
+
+{ t }
+[ "29032039029302930290390329uafjklajsdfkasjflaskjflsadkjfroot" user-groups empty? ] unit-test
diff --git a/basis/unix/groups/groups.factor b/basis/unix/groups/groups.factor
index 531768656f..cfd37b0e56 100644
--- a/basis/unix/groups/groups.factor
+++ b/basis/unix/groups/groups.factor
@@ -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>