Blame


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