- (void) sprintf(fsize, "%8ld", p->fsize);
-/* get ftime */
- { char *cp = ctime(&p->fmtime);
- if ((p->fmtime < sixmonthsago) || (p->fmtime > now))
- (void) sprintf(ftime, " %-7.7s %-4.4s ", cp+4, cp+20);
- else
- (void) sprintf(ftime, " %-12.12s ", cp+4);
- }
-/* splat */
- *lp++ = p->ftype;
- lp = fmtmode(lp, p->fflags);
- (void) sprintf(lp, "%3d %s%s%s%s",
- p->fnl, uname, gflg ? gname : "", fsize, ftime);
- return (lstuffbuf);
-}
-
-int m1[] = { 1, S_IREAD>>0, 'r', '-' };
-int m2[] = { 1, S_IWRITE>>0, 'w', '-' };
-int m3[] = { 3, S_ISUID|(S_IEXEC>>0), 's', S_ISUID, 'S', S_IEXEC>>0, 'x', '-' };
-int m4[] = { 1, S_IREAD>>3, 'r', '-' };
-int m5[] = { 1, S_IWRITE>>3, 'w', '-' };
-int m6[] = { 3, S_ISGID|(S_IEXEC>>3), 's', S_ISGID, 'S', S_IEXEC>>3, 'x', '-' };
-int m7[] = { 1, S_IREAD>>6, 'r', '-' };
-int m8[] = { 1, S_IWRITE>>6, 'w', '-' };
-int m9[] = { 3, S_ISVTX|(S_IEXEC>>6), 't', S_ISVTX, 'T', S_IEXEC>>6, 'x', '-' };
-
-int *m[] = { m1, m2, m3, m4, m5, m6, m7, m8, m9};
-
-char *
-fmtmode(lp, flags)
- char *lp;
- register int flags;
-{
- int **mp;
-
- for (mp = &m[0]; mp < &m[sizeof(m)/sizeof(m[0])]; ) {
- register int *pairp = *mp++;
- register int n = *pairp++;
-
- while (--n >= 0 && (flags&*pairp) != *pairp)
- pairp += 2;
- *lp++ = pairp[n>=0];
- }
- return (lp);
-}
-
-/* rest should be done with nameserver or database */
-
-#include <pwd.h>
-#include <grp.h>
-#include <utmp.h>
-
-struct utmp utmp;
-#define NMAX (sizeof (utmp.ut_name))
-#define SCPYN(a, b) strncpy(a, b, NMAX)
-
-#define NCACHE 64 /* power of 2 */
-#define CAMASK NCACHE - 1
-
-char *
-getname(uid)
- uid_t uid;
-{
- static struct ncache {
- uid_t uid;
- char name[NMAX+1];
- } c_uid[NCACHE];
- register struct passwd *pw;
- register struct ncache *cp;
-
- cp = c_uid + (uid & CAMASK);
- if (cp->uid == uid && *cp->name)
- return(cp->name);
- if (!(pw = getpwuid(uid)))
- return((char *)0);
- cp->uid = uid;
- SCPYN(cp->name, pw->pw_name);
- return(cp->name);
-}
-
-char *
-getgroup(gid)
- gid_t gid;
-{
- static struct ncache {
- gid_t gid;
- char name[NMAX+1];
- } c_gid[NCACHE];
- register struct group *gr;
- register struct ncache *cp;
-
- cp = c_gid + (gid & CAMASK);
- if (cp->gid == gid && *cp->name)
- return(cp->name);
- if (!(gr = getgrgid(gid)))
- return((char *)0);
- cp->gid = gid;
- SCPYN(cp->name, gr->gr_name);
- return(cp->name);