Blob
1 #include "u.h"2 #include "libc.h"3 #include <sys/types.h>4 #include <sys/stat.h>5 #include <pwd.h>6 #include <grp.h>8 static void9 statconv(Dir *dir, struct stat *s)10 {11 struct passwd *p;12 struct group *g;13 ulong q;15 p = getpwuid(s->st_uid);16 if (p)17 strncpy(dir->uid, p->pw_name, NAMELEN);18 g = getgrgid(s->st_gid);19 if (g)20 strncpy(dir->gid, g->gr_name, NAMELEN);21 q = 0;22 if(S_ISDIR(s->st_mode))23 q = CHDIR;24 q |= s->st_ino & 0x00FFFFFFUL;25 dir->qid.path = q;26 dir->qid.vers = s->st_mtime;27 dir->mode = (dir->qid.path&CHDIR)|(s->st_mode&0777);28 dir->atime = s->st_atime;29 dir->mtime = s->st_mtime;30 dir->length = s->st_size;31 dir->dev = s->st_dev;32 dir->type = 'M';33 if(S_ISFIFO(s->st_mode))34 dir->type = '|';35 }37 int38 dirfstat(int fd, Dir *d)39 {40 struct stat sbuf;42 if(fstat(fd, &sbuf) < 0)43 return -1;44 statconv(d, &sbuf);45 return 0;46 }48 static char *49 lelem(char *path)50 {51 char *pr;53 pr = utfrrune(path, '/');54 if(pr)55 pr++;56 else57 pr = path;58 return pr;59 }61 int62 dirstat(char *f, Dir *d)63 {64 struct stat sbuf;66 if(stat(f, &sbuf) < 0)67 return -1;68 statconv(d, &sbuf);69 strncpy(d->name, lelem(f), NAMELEN);70 return 0;71 }73 int74 dirfwstat(int fd, Dir *d)75 {76 return -1;77 }79 int80 dirwstat(char *name, Dir *d)81 {82 return -1;83 }