Use user_from_uid(3) and group_from_gid(3) in a few more places
that do repeated lookups.

 - todd

Index: sbin/fsck_ext2fs/inode.c
===================================================================
RCS file: /cvs/src/sbin/fsck_ext2fs/inode.c,v
retrieving revision 1.27
diff -u -p -u -r1.27 inode.c
--- sbin/fsck_ext2fs/inode.c    16 Dec 2016 17:44:59 -0000      1.27
+++ sbin/fsck_ext2fs/inode.c    13 Sep 2018 15:38:59 -0000
@@ -559,10 +559,7 @@ void
 pinode(ino_t ino)
 {
        struct ext2fs_dinode *dp;
-       char *p;
-#ifndef SMALL
-       struct passwd *pw;
-#endif
+       const char *p;
        time_t t;
        u_int32_t uid;
 
@@ -573,11 +570,11 @@ pinode(ino_t ino)
        printf(" OWNER=");
        uid = letoh16(dp->e2di_uid_low) | (letoh16(dp->e2di_uid_high) << 16);
 #ifndef SMALL
-       if ((pw = getpwuid((int)uid)) != 0)
-               printf("%s ", pw->pw_name);
+       if ((p = user_from_uid(uid, 1)) != NULL)
+               printf("%s ", p);
        else
 #endif
-               printf("%u ", (unsigned)uid);
+               printf("%u ", uid);
        printf("MODE=%o\n", letoh16(dp->e2di_mode));
        if (preen)
                printf("%s: ", cdevname());
Index: sbin/fsck_ffs/inode.c
===================================================================
RCS file: /cvs/src/sbin/fsck_ffs/inode.c,v
retrieving revision 1.48
diff -u -p -u -r1.48 inode.c
--- sbin/fsck_ffs/inode.c       16 Dec 2016 17:44:59 -0000      1.48
+++ sbin/fsck_ffs/inode.c       13 Sep 2018 15:38:59 -0000
@@ -525,10 +525,7 @@ void
 pinode(ino_t ino)
 {
        union dinode *dp;
-       char *p;
-#ifndef SMALL
-       struct passwd *pw;
-#endif
+       const char *p;
        time_t t;
 
        printf(" I=%llu ", (unsigned long long)ino);
@@ -537,8 +534,8 @@ pinode(ino_t ino)
        dp = ginode(ino);
        printf(" OWNER=");
 #ifndef SMALL
-       if ((pw = getpwuid(DIP(dp, di_uid))) != 0)
-               printf("%s ", pw->pw_name);
+       if ((p = user_from_uid(DIP(dp, di_uid), 1)) != NULL)
+               printf("%s ", p);
        else
 #endif
                printf("%u ", (unsigned)DIP(dp, di_uid));
Index: sbin/fsdb/fsdbutil.c
===================================================================
RCS file: /cvs/src/sbin/fsdb/fsdbutil.c,v
retrieving revision 1.18
diff -u -p -u -r1.18 fsdbutil.c
--- sbin/fsdb/fsdbutil.c        29 Jul 2017 21:14:56 -0000      1.18
+++ sbin/fsdb/fsdbutil.c        13 Sep 2018 15:38:59 -0000
@@ -83,8 +83,7 @@ argcount(struct cmdtable *cmdp, int argc
 void
 printstat(const char *cp, ino_t inum, union dinode *dp)
 {
-       struct group *grp;
-       struct passwd *pw;
+       const char *name;
        time_t t;
        char *p;
 
@@ -139,12 +138,12 @@ printstat(const char *cp, ino_t inum, un
        printf("\n\tATIME=%15.15s %4.4s [%d nsec]\n", &p[4], &p[20],
            DIP(dp, di_atimensec));
 
-       if ((pw = getpwuid(DIP(dp, di_uid))))
-               printf("OWNER=%s ", pw->pw_name);
+       if ((name = user_from_uid(DIP(dp, di_uid), 1)) != NULL)
+               printf("OWNER=%s ", name);
        else
                printf("OWNUID=%u ", DIP(dp, di_uid));
-       if ((grp = getgrgid(DIP(dp, di_gid))))
-               printf("GRP=%s ", grp->gr_name);
+       if ((name = group_from_gid(DIP(dp, di_gid), 1)) != NULL)
+               printf("GRP=%s ", name);
        else
                printf("GID=%u ", DIP(dp, di_gid));
 
Index: usr.bin/fstat/fuser.c
===================================================================
RCS file: /cvs/src/usr.bin/fstat/fuser.c,v
retrieving revision 1.6
diff -u -p -u -r1.6 fuser.c
--- usr.bin/fstat/fuser.c       16 Jan 2015 06:40:08 -0000      1.6
+++ usr.bin/fstat/fuser.c       13 Sep 2018 15:38:59 -0000
@@ -133,7 +133,7 @@ fuser_check(struct kinfo_file *kf)
 static void
 printfu(struct fuser *fu)
 {
-       struct passwd *pwd;
+       const char *name;
 
        printf("%d", fu->pid);
        fflush(stdout);
@@ -148,11 +148,11 @@ printfu(struct fuser *fu)
                fprintf(stderr, "t");
 
        if (uflg) {
-               pwd = getpwuid(fu->uid);
-               if (pwd != NULL)
-                       fprintf(stderr, "(%s)", pwd->pw_name);
+               name = user_from_uid(fu->uid, 1);
+               if (name != NULL)
+                       fprintf(stderr, "(%s)", name);
                else
-                       fprintf(stderr, "(%d)", fu->uid);
+                       fprintf(stderr, "(%u)", fu->uid);
        }
 
        putchar(' ');
Index: usr.sbin/vmctl/vmctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/vmctl/vmctl.c,v
retrieving revision 1.57
diff -u -p -u -r1.57 vmctl.c
--- usr.sbin/vmctl/vmctl.c      11 Sep 2018 04:03:16 -0000      1.57
+++ usr.sbin/vmctl/vmctl.c      13 Sep 2018 15:39:12 -0000
@@ -631,8 +631,7 @@ print_vm_info(struct vmop_info_result *l
        char curmem[FMT_SCALED_STRSIZE];
        char maxmem[FMT_SCALED_STRSIZE];
        char user[16], group[16];
-       struct passwd *pw;
-       struct group *gr;
+       const char *name;
 
        printf("%5s %5s %5s %7s %7s %7s %12s %s\n", "ID", "PID", "VCPUS",
            "MAXMEM", "CURMEM", "TTY", "OWNER", "NAME");
@@ -642,22 +641,23 @@ print_vm_info(struct vmop_info_result *l
                vir = &vmi->vir_info;
                if (check_info_id(vir->vir_name, vir->vir_id)) {
                        /* get user name */
-                       if ((pw = getpwuid(vmi->vir_uid)) == NULL)
+                       name = user_from_uid(vmi->vir_uid, 1);
+                       if (name == NULL)
                                (void)snprintf(user, sizeof(user),
                                    "%d", vmi->vir_uid);
                        else
-                               (void)strlcpy(user, pw->pw_name,
-                                   sizeof(user));
+                               (void)strlcpy(user, name, sizeof(user));
                        /* get group name */
                        if (vmi->vir_gid != -1) {
                                if (vmi->vir_uid == 0)
                                        *user = '\0';
-                               if ((gr = getgrgid(vmi->vir_gid)) == NULL)
+                               name = group_from_gid(vmi->vir_gid, 1);
+                               if (name == NULL)
                                        (void)snprintf(group, sizeof(group),
                                            ":%lld", vmi->vir_gid);
                                else
                                        (void)snprintf(group, sizeof(group),
-                                           ":%s", gr->gr_name);
+                                           ":%s", name);
                                (void)strlcat(user, group, sizeof(user));
                        }
 

Reply via email to