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 void
9 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 int
38 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 else
57 pr = path;
58 return pr;
59 }
61 int
62 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 int
74 dirfwstat(int fd, Dir *d)
75 {
76 return -1;
77 }
79 int
80 dirwstat(char *name, Dir *d)
81 {
82 return -1;
83 }