diff --git a/src/lua/pwd.lua b/src/lua/pwd.lua
index 8f17951df0e4463619d8f6e98ac8e7cb1b8e2a4c..b2c8e121f79c8ebc86508407b358233b81d98f5c 100644
--- a/src/lua/pwd.lua
+++ b/src/lua/pwd.lua
@@ -159,44 +159,37 @@ local function getpw(uid)
 end
 
 local function getpwall()
-    errno(0)
     ffi.C.setpwent()
-    if errno() ~= 0 then
-        return nil
-    end
     local pws = {}
     while true do
+        errno(0)
         local pw = ffi.C.getpwent()
         if pw == nil then
+            if errno() ~= 0 then
+                return nil
+            end
             break
         end
         table.insert(pws, getpw(pw.pw_uid))
     end
     ffi.C.endpwent()
-    if errno() ~= 0 then
-        return nil
-    end
     return pws
 end
 
 local function getgrall()
-    errno(0)
     ffi.C.setgrent()
-    if errno() ~= 0 then
-        return nil
-    end
     local grs = {}
     while true do
         local gr = ffi.C.getgrent()
         if gr == nil then
+            if errno() ~= 0 then
+                return nil
+            end
             break
         end
         table.insert(grs, getpw(gr.gr_gid))
     end
     ffi.C.endgrent()
-    if errno() ~= 0 then
-        return nil
-    end
     return grs
 end