#include <u.h>
#include <libc.h>
#include <auth.h>
#include <fcall.h>

char *modes[] =
{
       "---",
       "--x",
       "-w-",
       "-wx",
       "r--",
       "r-x",
       "rw-",
       "rwx",
};

static void
rwx(long m, char *s)
{
       strncpy(s, modes[m], 3);
}

int
dirmodeconv(va_list *arg, Fconv *f)
{
       static char buf[16];
       ulong m;

       m = va_arg(*arg, ulong);

       if(m & CHDIR)
               buf[0]='d';
       else if(m & CHAPPEND)
               buf[0]='a';
       else
               buf[0]='-';
       if(m & CHEXCL)
               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;

       strconv(buf, f);
       return 0;
}