eventfd.c 781 B

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