]> git.tdb.fi Git - libs/core.git/blobdiff - source/fs/unix/stat_owner.cpp
Improve robustness of resolving user/group names in Stat
[libs/core.git] / source / fs / unix / stat_owner.cpp
index 1a33d74efc0d862df0cbf85f3e1bd8a4a9ff5b11..9c643d9cf92c3533d8f80ee4df3b4649e567e4d6 100644 (file)
@@ -11,19 +11,29 @@ void Stat::Private::fill_owner_info(Stat::OwnerInfo &result)
 {
        char buf[1024];
 
-       struct passwd pw;
-       struct passwd *owner;
-       if(!getpwuid_r(owner_id, &pw, buf, sizeof(buf), &owner) && owner)
-               result.owner = owner->pw_name;
+       if(owner_id!=INVALID_UID)
+       {
+               struct passwd pw;
+               struct passwd *owner;
+               if(!getpwuid_r(owner_id, &pw, buf, sizeof(buf), &owner) && owner)
+                       result.owner = owner->pw_name;
+               else
+                       result.owner = format("%d", owner_id);
+       }
        else
-               result.owner = format("%d", owner_id);
+               result.owner = "None";
 
-       struct group gr;
-       struct group *group;
-       if(!getgrgid_r(group_id, &gr, buf, sizeof(buf), &group) && group)
-               result.group = group->gr_name;
+       if(group_id!=INVALID_GID)
+       {
+               struct group gr;
+               struct group *group;
+               if(!getgrgid_r(group_id, &gr, buf, sizeof(buf), &group) && group)
+                       result.group = group->gr_name;
+               else
+                       result.group = format("%d", group_id);
+       }
        else
-               result.group = format("%d", group_id);
+               result.group = "None";
 }
 
 } // namespace FS