49 lines
581 B
C
49 lines
581 B
C
|
#include <u.h>
|
||
|
#include <libc.h>
|
||
|
#include <fcall.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);
|
||
|
}
|