flock.c 902 B

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