xref: /plan9/sys/src/cmd/unix/u9fs/dirmodeconv.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier #include <plan9.h>
2*9a747e4fSDavid du Colombier #include <fcall.h>
3*9a747e4fSDavid du Colombier 
4*9a747e4fSDavid du Colombier static char *modes[] =
5*9a747e4fSDavid du Colombier {
6*9a747e4fSDavid du Colombier 	"---",
7*9a747e4fSDavid du Colombier 	"--x",
8*9a747e4fSDavid du Colombier 	"-w-",
9*9a747e4fSDavid du Colombier 	"-wx",
10*9a747e4fSDavid du Colombier 	"r--",
11*9a747e4fSDavid du Colombier 	"r-x",
12*9a747e4fSDavid du Colombier 	"rw-",
13*9a747e4fSDavid du Colombier 	"rwx",
14*9a747e4fSDavid du Colombier };
15*9a747e4fSDavid du Colombier 
16*9a747e4fSDavid du Colombier static void
rwx(long m,char * s)17*9a747e4fSDavid du Colombier rwx(long m, char *s)
18*9a747e4fSDavid du Colombier {
19*9a747e4fSDavid du Colombier 	strncpy(s, modes[m], 3);
20*9a747e4fSDavid du Colombier }
21*9a747e4fSDavid du Colombier 
22*9a747e4fSDavid du Colombier int
dirmodeconv(va_list * arg,Fconv * f)23*9a747e4fSDavid du Colombier dirmodeconv(va_list *arg, Fconv *f)
24*9a747e4fSDavid du Colombier {
25*9a747e4fSDavid du Colombier 	static char buf[16];
26*9a747e4fSDavid du Colombier 	ulong m;
27*9a747e4fSDavid du Colombier 
28*9a747e4fSDavid du Colombier 	m = va_arg(*arg, ulong);
29*9a747e4fSDavid du Colombier 
30*9a747e4fSDavid du Colombier 	if(m & DMDIR)
31*9a747e4fSDavid du Colombier 		buf[0]='d';
32*9a747e4fSDavid du Colombier 	else if(m & DMAPPEND)
33*9a747e4fSDavid du Colombier 		buf[0]='a';
34*9a747e4fSDavid du Colombier 	else
35*9a747e4fSDavid du Colombier 		buf[0]='-';
36*9a747e4fSDavid du Colombier 	if(m & DMEXCL)
37*9a747e4fSDavid du Colombier 		buf[1]='l';
38*9a747e4fSDavid du Colombier 	else
39*9a747e4fSDavid du Colombier 		buf[1]='-';
40*9a747e4fSDavid du Colombier 	rwx((m>>6)&7, buf+2);
41*9a747e4fSDavid du Colombier 	rwx((m>>3)&7, buf+5);
42*9a747e4fSDavid du Colombier 	rwx((m>>0)&7, buf+8);
43*9a747e4fSDavid du Colombier 	buf[11] = 0;
44*9a747e4fSDavid du Colombier 
45*9a747e4fSDavid du Colombier 	strconv(buf, f);
46*9a747e4fSDavid du Colombier 	return 0;
47*9a747e4fSDavid du Colombier }
48