Blame


1 d3df3087 2003-12-06 devnull #include <u.h>
2 d3df3087 2003-12-06 devnull #include <libc.h>
3 d3df3087 2003-12-06 devnull #include <fcall.h>
4 d3df3087 2003-12-06 devnull
5 d3df3087 2003-12-06 devnull uint
6 d3df3087 2003-12-06 devnull sizeD2M(Dir *d)
7 d3df3087 2003-12-06 devnull {
8 d3df3087 2003-12-06 devnull char *sv[4];
9 d3df3087 2003-12-06 devnull int i, ns;
10 d3df3087 2003-12-06 devnull
11 d3df3087 2003-12-06 devnull sv[0] = d->name;
12 d3df3087 2003-12-06 devnull sv[1] = d->uid;
13 d3df3087 2003-12-06 devnull sv[2] = d->gid;
14 d3df3087 2003-12-06 devnull sv[3] = d->muid;
15 d3df3087 2003-12-06 devnull
16 d3df3087 2003-12-06 devnull ns = 0;
17 d3df3087 2003-12-06 devnull for(i = 0; i < 4; i++)
18 d3df3087 2003-12-06 devnull if(sv[i])
19 d3df3087 2003-12-06 devnull ns += strlen(sv[i]);
20 d3df3087 2003-12-06 devnull
21 d3df3087 2003-12-06 devnull return STATFIXLEN + ns;
22 d3df3087 2003-12-06 devnull }
23 d3df3087 2003-12-06 devnull
24 d3df3087 2003-12-06 devnull uint
25 d3df3087 2003-12-06 devnull convD2M(Dir *d, uchar *buf, uint nbuf)
26 d3df3087 2003-12-06 devnull {
27 d3df3087 2003-12-06 devnull uchar *p, *ebuf;
28 d3df3087 2003-12-06 devnull char *sv[4];
29 d3df3087 2003-12-06 devnull int i, ns, nsv[4], ss;
30 d3df3087 2003-12-06 devnull
31 d3df3087 2003-12-06 devnull if(nbuf < BIT16SZ)
32 d3df3087 2003-12-06 devnull return 0;
33 d3df3087 2003-12-06 devnull
34 d3df3087 2003-12-06 devnull p = buf;
35 d3df3087 2003-12-06 devnull ebuf = buf + nbuf;
36 d3df3087 2003-12-06 devnull
37 d3df3087 2003-12-06 devnull sv[0] = d->name;
38 d3df3087 2003-12-06 devnull sv[1] = d->uid;
39 d3df3087 2003-12-06 devnull sv[2] = d->gid;
40 d3df3087 2003-12-06 devnull sv[3] = d->muid;
41 d3df3087 2003-12-06 devnull
42 d3df3087 2003-12-06 devnull ns = 0;
43 d3df3087 2003-12-06 devnull for(i = 0; i < 4; i++){
44 d3df3087 2003-12-06 devnull if(sv[i])
45 d3df3087 2003-12-06 devnull nsv[i] = strlen(sv[i]);
46 d3df3087 2003-12-06 devnull else
47 d3df3087 2003-12-06 devnull nsv[i] = 0;
48 d3df3087 2003-12-06 devnull ns += nsv[i];
49 d3df3087 2003-12-06 devnull }
50 d3df3087 2003-12-06 devnull
51 d3df3087 2003-12-06 devnull ss = STATFIXLEN + ns;
52 d3df3087 2003-12-06 devnull
53 d3df3087 2003-12-06 devnull /* set size befor erroring, so user can know how much is needed */
54 d3df3087 2003-12-06 devnull /* note that length excludes count field itself */
55 d3df3087 2003-12-06 devnull PBIT16(p, ss-BIT16SZ);
56 d3df3087 2003-12-06 devnull p += BIT16SZ;
57 d3df3087 2003-12-06 devnull
58 d3df3087 2003-12-06 devnull if(ss > nbuf)
59 d3df3087 2003-12-06 devnull return BIT16SZ;
60 d3df3087 2003-12-06 devnull
61 d3df3087 2003-12-06 devnull PBIT16(p, d->type);
62 d3df3087 2003-12-06 devnull p += BIT16SZ;
63 d3df3087 2003-12-06 devnull PBIT32(p, d->dev);
64 d3df3087 2003-12-06 devnull p += BIT32SZ;
65 d3df3087 2003-12-06 devnull PBIT8(p, d->qid.type);
66 d3df3087 2003-12-06 devnull p += BIT8SZ;
67 d3df3087 2003-12-06 devnull PBIT32(p, d->qid.vers);
68 d3df3087 2003-12-06 devnull p += BIT32SZ;
69 d3df3087 2003-12-06 devnull PBIT64(p, d->qid.path);
70 d3df3087 2003-12-06 devnull p += BIT64SZ;
71 d3df3087 2003-12-06 devnull PBIT32(p, d->mode);
72 d3df3087 2003-12-06 devnull p += BIT32SZ;
73 d3df3087 2003-12-06 devnull PBIT32(p, d->atime);
74 d3df3087 2003-12-06 devnull p += BIT32SZ;
75 d3df3087 2003-12-06 devnull PBIT32(p, d->mtime);
76 d3df3087 2003-12-06 devnull p += BIT32SZ;
77 d3df3087 2003-12-06 devnull PBIT64(p, d->length);
78 d3df3087 2003-12-06 devnull p += BIT64SZ;
79 d3df3087 2003-12-06 devnull
80 d3df3087 2003-12-06 devnull for(i = 0; i < 4; i++){
81 d3df3087 2003-12-06 devnull ns = nsv[i];
82 d3df3087 2003-12-06 devnull if(p + ns + BIT16SZ > ebuf)
83 d3df3087 2003-12-06 devnull return 0;
84 d3df3087 2003-12-06 devnull PBIT16(p, ns);
85 d3df3087 2003-12-06 devnull p += BIT16SZ;
86 d3df3087 2003-12-06 devnull if(ns)
87 d3df3087 2003-12-06 devnull memmove(p, sv[i], ns);
88 d3df3087 2003-12-06 devnull p += ns;
89 d3df3087 2003-12-06 devnull }
90 d3df3087 2003-12-06 devnull
91 d3df3087 2003-12-06 devnull if(ss != p - buf)
92 d3df3087 2003-12-06 devnull return 0;
93 d3df3087 2003-12-06 devnull
94 d3df3087 2003-12-06 devnull return p - buf;
95 d3df3087 2003-12-06 devnull }