URI: 
       tCache last uid, gid to make translation faster. - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 6f6553dfb7ab5b286e3ac75348eb85dc8fda6666
   DIR parent 62c141582684ff2afdaa7c8698df9f596b2d3c84
  HTML Author: rsc <devnull@localhost>
       Date:   Thu,  8 Apr 2004 19:31:21 +0000
       
       Cache last uid, gid to make translation faster.
       
       Diffstat:
         M src/lib9/_p9dir.c                   |      25 +++++++++++++++++++++----
       
       1 file changed, 21 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c
       t@@ -47,13 +47,20 @@ isdisk(struct stat *st)
        #define _HAVESTGEN
        #endif
        
       +/*
       + * Caching the last group and passwd looked up is
       + * a significant win (stupidly enough) on most systems.
       + * It's not safe for threaded programs, but neither is using
       + * getpwnam in the first place, so I'm not too worried.
       + */
        int
        _p9dir(struct stat *st, char *name, Dir *d, char **str, char *estr)
        {
                char *s;
                char tmp[20];
       -        struct group *g;
       -        struct passwd *p;
       +        static struct group *g;
       +        static struct passwd *p;
       +        static int gid, uid;
                int sz;
        
                sz = 0;
       t@@ -82,7 +89,12 @@ _p9dir(struct stat *st, char *name, Dir *d, char **str, char *estr)
                sz += strlen(s)+1;
        
                /* user */
       -        p = getpwuid(st->st_uid);
       +        if(p && st->st_uid == uid && p->pw_uid == uid)
       +                ;
       +        else{
       +                p = getpwuid(st->st_uid);
       +                uid = st->st_uid;
       +        }
                if(p == nil){
                        snprint(tmp, sizeof tmp, "%d", (int)st->st_uid);
                        s = tmp;
       t@@ -100,7 +112,12 @@ _p9dir(struct stat *st, char *name, Dir *d, char **str, char *estr)
                }
        
                /* group */
       -        g = getgrgid(st->st_gid);
       +        if(g && st->st_gid == gid && g->gr_gid == gid)
       +                ;
       +        else{
       +                g = getgrgid(st->st_gid);
       +                gid = st->st_gid;
       +        }
                if(g == nil){
                        snprint(tmp, sizeof tmp, "%d", (int)st->st_gid);
                        s = tmp;