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