- (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[] = { 2, S_ISUID, 's', S_IEXEC>>0, 'x', '-' };
-int m4[] = { 1, S_IREAD>>3, 'r', '-' };
-int m5[] = { 1, S_IWRITE>>3, 'w', '-' };
-int m6[] = { 2, S_ISGID, 's', S_IEXEC>>3, 'x', '-' };
-int m7[] = { 1, S_IREAD>>6, 'r', '-' };
-int m8[] = { 1, S_IWRITE>>6, 'w', '-' };
-int m9[] = { 2, S_ISVTX, 't', S_IEXEC>>6, 'x', '-' };
-
-int *m[] = { m1, m2, m3, m4, m5, m6, m7, m8, m9};
-
-char *
-fmtmode(lp, flags)
- char *lp;
- 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++) == 0)
- pairp++;
- *lp++ = *pairp;
- }
- return (lp);
-}
-
-/* rest should be done with nameserver or database */
-
-#include <pwd.h>
-#include <grp.h>
-#include <utmp.h>
-
-struct utmp utmp;
-
-#define NUID 2048
-#define NGID 300
-#define NMAX (sizeof (utmp.ut_name))
-
-char names[NUID][NMAX+1];
-char outrangename[NMAX+1];
-int outrangeuid = -1;
-char groups[NGID][NMAX+1];
-char outrangegroup[NMAX+1];
-int outrangegid = -1;
-
-char *
-getname(uid)
-{
- register struct passwd *pw;
- static init;
- struct passwd *getpwent();
-
- if (uid >= 0 && uid < NUID && names[uid][0])
- return (&names[uid][0]);
- if (uid >= 0 && uid == outrangeuid)
- return (outrangename);
- if (init == 2) {
- if (uid < NUID)
- return (0);
- setpwent();
- while (pw = getpwent()) {
- if (pw->pw_uid != uid)
- continue;
- outrangeuid = pw->pw_uid;
- strncpy(outrangename, pw->pw_name, NUID);
- endpwent();
- return (outrangename);
- }
- endpwent();
- return (0);
- }
- if (init == 0)
- setpwent(), init = 1;
- while (pw = getpwent()) {
- if (pw->pw_uid < 0 || pw->pw_uid >= NUID) {
- if (pw->pw_uid == uid) {
- outrangeuid = pw->pw_uid;
- strncpy(outrangename, pw->pw_name, NUID);
- return (outrangename);
- }
- continue;
- }
- if (names[pw->pw_uid][0])
- continue;
- strncpy(names[pw->pw_uid], pw->pw_name, NMAX);
- if (pw->pw_uid == uid) {
- return (&names[uid][0]);
- }
- }
- init = 2;
- endpwent();
- return (0);
-}
-
-char *
-getgroup(gid)
-{
- register struct group *gr;
- static init;
- struct group *getgrent();
-
- if (gid >= 0 && gid < NGID && groups[gid][0])
- return (&groups[gid][0]);
- if (gid >= 0 && gid == outrangegid)
- return (outrangegroup);
- if (init == 2) {
- if (gid < NGID)
- return (0);
- setgrent();
- while (gr = getgrent()) {
- if (gr->gr_gid != gid)
- continue;
- outrangegid = gr->gr_gid;
- strncpy(outrangegroup, gr->gr_name, NGID);
- endgrent();
- return (outrangegroup);
- }
- endgrent();
- return (0);
- }
- if (init == 0)
- setgrent(), init = 1;
- while (gr = getgrent()) {
- if (gr->gr_gid < 0 || gr->gr_gid >= NGID) {
- if (gr->gr_gid == gid) {
- outrangegid = gr->gr_gid;
- strncpy(outrangegroup, gr->gr_name, NGID);
- return (outrangegroup);
- }
- continue;
- }
- if (groups[gr->gr_gid][0])
- continue;
- strncpy(groups[gr->gr_gid], gr->gr_name, NMAX);
- if (gr->gr_gid == gid) {
- return (&groups[gid][0]);
- }
- }
- init = 2;
- endgrent();
- return (0);