eventfd.c 922 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. // SPDX-License-Identifier: LGPL-2.1
  2. #ifndef EFD_SEMAPHORE
  3. #define EFD_SEMAPHORE 1
  4. #endif
  5. #ifndef EFD_NONBLOCK
  6. #define EFD_NONBLOCK 00004000
  7. #endif
  8. #ifndef EFD_CLOEXEC
  9. #define EFD_CLOEXEC 02000000
  10. #endif
  11. static size_t syscall_arg__scnprintf_eventfd_flags(char *bf, size_t size, struct syscall_arg *arg)
  12. {
  13. bool show_prefix = arg->show_string_prefix;
  14. const char *prefix = "EFD_";
  15. int printed = 0, flags = arg->val;
  16. if (flags == 0)
  17. return scnprintf(bf, size, "NONE");
  18. #define P_FLAG(n) \
  19. if (flags & EFD_##n) { \
  20. printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
  21. flags &= ~EFD_##n; \
  22. }
  23. P_FLAG(SEMAPHORE);
  24. P_FLAG(CLOEXEC);
  25. P_FLAG(NONBLOCK);
  26. #undef P_FLAG
  27. if (flags)
  28. printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
  29. return printed;
  30. }
  31. #define SCA_EFD_FLAGS syscall_arg__scnprintf_eventfd_flags