Blob
1 #include <u.h>2 #include <libc.h>4 static char *modes[] =5 {6 "---",7 "--x",8 "-w-",9 "-wx",10 "r--",11 "r-x",12 "rw-",13 "rwx",14 };16 static void17 rwx(long m, char *s)18 {19 strncpy(s, modes[m], 3);20 }22 int23 dirmodefmt(Fmt *f)24 {25 static char buf[16];26 ulong m;28 m = va_arg(f->args, ulong);30 if(m & DMDIR)31 buf[0]='d';32 else if(m & DMAPPEND)33 buf[0]='a';34 else if(m & DMAUTH)35 buf[0]='A';36 else if(m & DMDEVICE)37 buf[0] = 'D';38 else if(m & DMSYMLINK)39 buf[0] = 'L';40 else if(m & DMSOCKET)41 buf[0] = 'S';42 else if(m & DMNAMEDPIPE)43 buf[0] = 'P';44 else45 buf[0]='-';46 if(m & DMEXCL)47 buf[1]='l';48 else49 buf[1]='-';50 rwx((m>>6)&7, buf+2);51 rwx((m>>3)&7, buf+5);52 rwx((m>>0)&7, buf+8);53 buf[11] = 0;54 return fmtstrcpy(f, buf);55 }