flock.c 858 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include <fcntl.h>
  2. #ifndef LOCK_MAND
  3. #define LOCK_MAND 32
  4. #endif
  5. #ifndef LOCK_READ
  6. #define LOCK_READ 64
  7. #endif
  8. #ifndef LOCK_WRITE
  9. #define LOCK_WRITE 128
  10. #endif
  11. #ifndef LOCK_RW
  12. #define LOCK_RW 192
  13. #endif
  14. static size_t syscall_arg__scnprintf_flock(char *bf, size_t size,
  15. struct syscall_arg *arg)
  16. {
  17. int printed = 0, op = arg->val;
  18. if (op == 0)
  19. return scnprintf(bf, size, "NONE");
  20. #define P_CMD(cmd) \
  21. if ((op & LOCK_##cmd) == LOCK_##cmd) { \
  22. printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #cmd); \
  23. op &= ~LOCK_##cmd; \
  24. }
  25. P_CMD(SH);
  26. P_CMD(EX);
  27. P_CMD(NB);
  28. P_CMD(UN);
  29. P_CMD(MAND);
  30. P_CMD(RW);
  31. P_CMD(READ);
  32. P_CMD(WRITE);
  33. #undef P_OP
  34. if (op)
  35. printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", op);
  36. return printed;
  37. }
  38. #define SCA_FLOCK syscall_arg__scnprintf_flock