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