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 74dd0321 2010-12-07 rsc sizeD2M(Dir *d)
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;
20 fb941e08 2005-09-13 devnull for(i = 0; i < nstr; i++)
21 d3df3087 2003-12-06 devnull if(sv[i])
22 d3df3087 2003-12-06 devnull ns += strlen(sv[i]);
24 fb941e08 2005-09-13 devnull return fixlen + ns;
28 74dd0321 2010-12-07 rsc convD2M(Dir *d, uchar *buf, uint nbuf)
30 d3df3087 2003-12-06 devnull uchar *p, *ebuf;
31 fb941e08 2005-09-13 devnull char *sv[5];
32 adeb5ac9 2005-12-29 devnull int i, ns, nsv[5], ss, nstr, fixlen;
34 d3df3087 2003-12-06 devnull if(nbuf < BIT16SZ)
35 d3df3087 2003-12-06 devnull return 0;
38 d3df3087 2003-12-06 devnull ebuf = buf + nbuf;
40 d3df3087 2003-12-06 devnull sv[0] = d->name;
41 d3df3087 2003-12-06 devnull sv[1] = d->uid;
42 d3df3087 2003-12-06 devnull sv[2] = d->gid;
43 d3df3087 2003-12-06 devnull sv[3] = d->muid;
45 fb941e08 2005-09-13 devnull fixlen = STATFIXLEN;
46 fb941e08 2005-09-13 devnull nstr = 4;
49 fb941e08 2005-09-13 devnull for(i = 0; i < nstr; i++){
50 d3df3087 2003-12-06 devnull if(sv[i])
51 d3df3087 2003-12-06 devnull nsv[i] = strlen(sv[i]);
53 d3df3087 2003-12-06 devnull nsv[i] = 0;
54 d3df3087 2003-12-06 devnull ns += nsv[i];
57 fb941e08 2005-09-13 devnull ss = fixlen + ns;
59 d3df3087 2003-12-06 devnull /* set size befor erroring, so user can know how much is needed */
60 d3df3087 2003-12-06 devnull /* note that length excludes count field itself */
61 d3df3087 2003-12-06 devnull PBIT16(p, ss-BIT16SZ);
62 d3df3087 2003-12-06 devnull p += BIT16SZ;
64 d3df3087 2003-12-06 devnull if(ss > nbuf)
65 d3df3087 2003-12-06 devnull return BIT16SZ;
67 d3df3087 2003-12-06 devnull PBIT16(p, d->type);
68 d3df3087 2003-12-06 devnull p += BIT16SZ;
69 d3df3087 2003-12-06 devnull PBIT32(p, d->dev);
70 d3df3087 2003-12-06 devnull p += BIT32SZ;
71 d3df3087 2003-12-06 devnull PBIT8(p, d->qid.type);
72 d3df3087 2003-12-06 devnull p += BIT8SZ;
73 d3df3087 2003-12-06 devnull PBIT32(p, d->qid.vers);
74 d3df3087 2003-12-06 devnull p += BIT32SZ;
75 d3df3087 2003-12-06 devnull PBIT64(p, d->qid.path);
76 d3df3087 2003-12-06 devnull p += BIT64SZ;
77 d3df3087 2003-12-06 devnull PBIT32(p, d->mode);
78 d3df3087 2003-12-06 devnull p += BIT32SZ;
79 d3df3087 2003-12-06 devnull PBIT32(p, d->atime);
80 d3df3087 2003-12-06 devnull p += BIT32SZ;
81 d3df3087 2003-12-06 devnull PBIT32(p, d->mtime);
82 d3df3087 2003-12-06 devnull p += BIT32SZ;
83 d3df3087 2003-12-06 devnull PBIT64(p, d->length);
84 d3df3087 2003-12-06 devnull p += BIT64SZ;
86 fb941e08 2005-09-13 devnull for(i = 0; i < nstr; i++){
87 d3df3087 2003-12-06 devnull ns = nsv[i];
88 d3df3087 2003-12-06 devnull if(p + ns + BIT16SZ > ebuf)
89 d3df3087 2003-12-06 devnull return 0;
90 d3df3087 2003-12-06 devnull PBIT16(p, ns);
91 d3df3087 2003-12-06 devnull p += BIT16SZ;
93 d3df3087 2003-12-06 devnull memmove(p, sv[i], ns);
97 d3df3087 2003-12-06 devnull if(ss != p - buf)
98 d3df3087 2003-12-06 devnull return 0;
100 d3df3087 2003-12-06 devnull return p - buf;