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>
6 fb941e08 2005-09-13 devnull sizeD2Mu(Dir *d, int dotu)
8 fb941e08 2005-09-13 devnull char *sv[5];
9 fb941e08 2005-09-13 devnull int i, ns, nstr, fixlen;
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;
16 fb941e08 2005-09-13 devnull fixlen = STATFIXLEN;
17 fb941e08 2005-09-13 devnull nstr = 4;
18 fb941e08 2005-09-13 devnull if(dotu){
19 fb941e08 2005-09-13 devnull fixlen = STATFIXLENU;
20 fb941e08 2005-09-13 devnull sv[4] = d->ext;
21 fb941e08 2005-09-13 devnull nstr = 5;
25 fb941e08 2005-09-13 devnull for(i = 0; i < nstr; i++)
26 d3df3087 2003-12-06 devnull if(sv[i])
27 d3df3087 2003-12-06 devnull ns += strlen(sv[i]);
29 fb941e08 2005-09-13 devnull return fixlen + ns;
33 fb941e08 2005-09-13 devnull sizeD2M(Dir *d)
35 fb941e08 2005-09-13 devnull return sizeD2Mu(d, 0);
39 fb941e08 2005-09-13 devnull convD2Mu(Dir *d, uchar *buf, uint nbuf, int dotu)
41 d3df3087 2003-12-06 devnull uchar *p, *ebuf;
42 fb941e08 2005-09-13 devnull char *sv[5];
43 adeb5ac9 2005-12-29 devnull int i, ns, nsv[5], ss, nstr, fixlen;
45 d3df3087 2003-12-06 devnull if(nbuf < BIT16SZ)
46 d3df3087 2003-12-06 devnull return 0;
49 d3df3087 2003-12-06 devnull ebuf = buf + nbuf;
51 d3df3087 2003-12-06 devnull sv[0] = d->name;
52 d3df3087 2003-12-06 devnull sv[1] = d->uid;
53 d3df3087 2003-12-06 devnull sv[2] = d->gid;
54 d3df3087 2003-12-06 devnull sv[3] = d->muid;
56 fb941e08 2005-09-13 devnull fixlen = STATFIXLEN;
57 fb941e08 2005-09-13 devnull nstr = 4;
58 fb941e08 2005-09-13 devnull if(dotu){
59 fb941e08 2005-09-13 devnull fixlen = STATFIXLENU;
60 fb941e08 2005-09-13 devnull sv[4] = d->ext;
61 fb941e08 2005-09-13 devnull nstr = 5;
65 fb941e08 2005-09-13 devnull for(i = 0; i < nstr; i++){
66 d3df3087 2003-12-06 devnull if(sv[i])
67 d3df3087 2003-12-06 devnull nsv[i] = strlen(sv[i]);
69 d3df3087 2003-12-06 devnull nsv[i] = 0;
70 d3df3087 2003-12-06 devnull ns += nsv[i];
73 fb941e08 2005-09-13 devnull ss = fixlen + ns;
75 d3df3087 2003-12-06 devnull /* set size befor erroring, so user can know how much is needed */
76 d3df3087 2003-12-06 devnull /* note that length excludes count field itself */
77 d3df3087 2003-12-06 devnull PBIT16(p, ss-BIT16SZ);
78 d3df3087 2003-12-06 devnull p += BIT16SZ;
80 d3df3087 2003-12-06 devnull if(ss > nbuf)
81 d3df3087 2003-12-06 devnull return BIT16SZ;
83 d3df3087 2003-12-06 devnull PBIT16(p, d->type);
84 d3df3087 2003-12-06 devnull p += BIT16SZ;
85 d3df3087 2003-12-06 devnull PBIT32(p, d->dev);
86 d3df3087 2003-12-06 devnull p += BIT32SZ;
87 d3df3087 2003-12-06 devnull PBIT8(p, d->qid.type);
88 d3df3087 2003-12-06 devnull p += BIT8SZ;
89 d3df3087 2003-12-06 devnull PBIT32(p, d->qid.vers);
90 d3df3087 2003-12-06 devnull p += BIT32SZ;
91 d3df3087 2003-12-06 devnull PBIT64(p, d->qid.path);
92 d3df3087 2003-12-06 devnull p += BIT64SZ;
93 d3df3087 2003-12-06 devnull PBIT32(p, d->mode);
94 d3df3087 2003-12-06 devnull p += BIT32SZ;
95 d3df3087 2003-12-06 devnull PBIT32(p, d->atime);
96 d3df3087 2003-12-06 devnull p += BIT32SZ;
97 d3df3087 2003-12-06 devnull PBIT32(p, d->mtime);
98 d3df3087 2003-12-06 devnull p += BIT32SZ;
99 d3df3087 2003-12-06 devnull PBIT64(p, d->length);
100 d3df3087 2003-12-06 devnull p += BIT64SZ;
102 fb941e08 2005-09-13 devnull for(i = 0; i < nstr; i++){
103 d3df3087 2003-12-06 devnull ns = nsv[i];
104 d3df3087 2003-12-06 devnull if(p + ns + BIT16SZ > ebuf)
105 d3df3087 2003-12-06 devnull return 0;
106 d3df3087 2003-12-06 devnull PBIT16(p, ns);
107 d3df3087 2003-12-06 devnull p += BIT16SZ;
109 d3df3087 2003-12-06 devnull memmove(p, sv[i], ns);
110 d3df3087 2003-12-06 devnull p += ns;
113 fb941e08 2005-09-13 devnull if(dotu){
114 fb941e08 2005-09-13 devnull PBIT32(p, d->uidnum);
115 fb941e08 2005-09-13 devnull p += BIT32SZ;
116 fb941e08 2005-09-13 devnull PBIT32(p, d->gidnum);
117 fb941e08 2005-09-13 devnull p += BIT32SZ;
118 fb941e08 2005-09-13 devnull PBIT32(p, d->muidnum);
119 fb941e08 2005-09-13 devnull p += BIT32SZ;
122 d3df3087 2003-12-06 devnull if(ss != p - buf)
123 d3df3087 2003-12-06 devnull return 0;
125 d3df3087 2003-12-06 devnull return p - buf;
129 fb941e08 2005-09-13 devnull convD2M(Dir *d, uchar *buf, uint nbuf)
131 fb941e08 2005-09-13 devnull return convD2Mu(d, buf, nbuf, 0);