xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/_dirconv.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier #include "lib.h"
2*3e12c5d1SDavid du Colombier #include <string.h>
3*3e12c5d1SDavid du Colombier #include "sys9.h"
4*3e12c5d1SDavid du Colombier #include "dir.h"
5*3e12c5d1SDavid du Colombier 
6*3e12c5d1SDavid du Colombier #define	CHAR(x)		*p++ = f->x
7*3e12c5d1SDavid du Colombier #define	SHORT(x)	p[0] = f->x; p[1] = f->x>>8; p += 2
8*3e12c5d1SDavid du Colombier #define	LONG(x)		p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24; p += 4
9*3e12c5d1SDavid du Colombier #define	VLONG(x)	p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24;\
10*3e12c5d1SDavid du Colombier 			p[4] = 0; p[5] = 0; p[6] = 0; p[7] = 0; p += 8
11*3e12c5d1SDavid du Colombier #define	STRING(x,n)	memcpy(p, f->x, n); p += n
12*3e12c5d1SDavid du Colombier 
13*3e12c5d1SDavid du Colombier int
convD2M(Dir * f,char * ap)14*3e12c5d1SDavid du Colombier convD2M(Dir *f, char *ap)
15*3e12c5d1SDavid du Colombier {
16*3e12c5d1SDavid du Colombier 	unsigned char *p;
17*3e12c5d1SDavid du Colombier 
18*3e12c5d1SDavid du Colombier 	p = (unsigned char*)ap;
19*3e12c5d1SDavid du Colombier 	STRING(name, sizeof(f->name));
20*3e12c5d1SDavid du Colombier 	STRING(uid, sizeof(f->uid));
21*3e12c5d1SDavid du Colombier 	STRING(gid, sizeof(f->gid));
22*3e12c5d1SDavid du Colombier 	LONG(qid.path);
23*3e12c5d1SDavid du Colombier 	LONG(qid.vers);
24*3e12c5d1SDavid du Colombier 	LONG(mode);
25*3e12c5d1SDavid du Colombier 	LONG(atime);
26*3e12c5d1SDavid du Colombier 	LONG(mtime);
27*3e12c5d1SDavid du Colombier 	VLONG(length);
28*3e12c5d1SDavid du Colombier 	SHORT(type);
29*3e12c5d1SDavid du Colombier 	SHORT(dev);
30*3e12c5d1SDavid du Colombier 	return p - (unsigned char*)ap;
31*3e12c5d1SDavid du Colombier }
32*3e12c5d1SDavid du Colombier 
33*3e12c5d1SDavid du Colombier #undef	CHAR
34*3e12c5d1SDavid du Colombier #undef	SHORT
35*3e12c5d1SDavid du Colombier #undef	LONG
36*3e12c5d1SDavid du Colombier #undef	VLONG
37*3e12c5d1SDavid du Colombier #undef	STRING
38*3e12c5d1SDavid du Colombier 
39*3e12c5d1SDavid du Colombier #define	CHAR(x)		f->x = *p++
40*3e12c5d1SDavid du Colombier #define	SHORT(x)	f->x = (p[0] | (p[1]<<8)); p += 2
41*3e12c5d1SDavid du Colombier #define	LONG(x)		f->x = (p[0] | (p[1]<<8) |\
42*3e12c5d1SDavid du Colombier 			(p[2]<<16) | (p[3]<<24)); p += 4
43*3e12c5d1SDavid du Colombier #define	VLONG(x)	f->x = (p[0] | (p[1]<<8) |\
44*3e12c5d1SDavid du Colombier 			(p[2]<<16) | (p[3]<<24)); p += 8
45*3e12c5d1SDavid du Colombier #define	STRING(x,n)	memcpy(f->x, p, n); p += n
46*3e12c5d1SDavid du Colombier 
47*3e12c5d1SDavid du Colombier int
convM2D(char * ap,Dir * f)48*3e12c5d1SDavid du Colombier convM2D(char *ap, Dir *f)
49*3e12c5d1SDavid du Colombier {
50*3e12c5d1SDavid du Colombier 	unsigned char *p;
51*3e12c5d1SDavid du Colombier 
52*3e12c5d1SDavid du Colombier 	p = (unsigned char*)ap;
53*3e12c5d1SDavid du Colombier 	STRING(name, sizeof(f->name));
54*3e12c5d1SDavid du Colombier 	STRING(uid, sizeof(f->uid));
55*3e12c5d1SDavid du Colombier 	STRING(gid, sizeof(f->gid));
56*3e12c5d1SDavid du Colombier 	LONG(qid.path);
57*3e12c5d1SDavid du Colombier 	LONG(qid.vers);
58*3e12c5d1SDavid du Colombier 	LONG(mode);
59*3e12c5d1SDavid du Colombier 	LONG(atime);
60*3e12c5d1SDavid du Colombier 	LONG(mtime);
61*3e12c5d1SDavid du Colombier 	VLONG(length);
62*3e12c5d1SDavid du Colombier 	SHORT(type);
63*3e12c5d1SDavid du Colombier 	SHORT(dev);
64*3e12c5d1SDavid du Colombier 	return p - (unsigned char*)ap;
65*3e12c5d1SDavid du Colombier }
66