#include <u.h> | |
#include <libc.h> | |
static char *modes[] = | |
{ | |
"---", | |
"--x", | |
"-w-", | |
"-wx", | |
"r--", | |
"r-x", | |
"rw-", | |
"rwx", | |
}; | |
static void | |
rwx(long m, char *s) | |
{ | |
strncpy(s, modes[m], 3); | |
} | |
int | |
dirmodefmt(Fmt *f) | |
{ | |
static char buf[16]; | |
ulong m; | |
m = va_arg(f->args, ulong); | |
if(m & DMDIR) | |
buf[0]='d'; | |
else if(m & DMAPPEND) | |
buf[0]='a'; | |
else if(m & DMAUTH) | |
buf[0]='A'; | |
else | |
buf[0]='-'; | |
if(m & DMEXCL) | |
buf[1]='l'; | |
else | |
buf[1]='-'; | |
rwx((m>>6)&7, buf+2); | |
rwx((m>>3)&7, buf+5); | |
rwx((m>>0)&7, buf+8); | |
buf[11] = 0; | |
return fmtstrcpy(f, buf); | |
} |