dirmodeconv.c 549 B

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