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