unix.h 819 B

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. * Macros for retrying interrupted system calls. RETURN_NULL
  3. */
  4. #define RETRY_NULL(STATUS, CALL) \
  5. do { \
  6. STATUS = (CALL); \
  7. } while ((STATUS == NULL) && (errno == EINTR))
  8. #define RETRY_NEG(STATUS, CALL) \
  9. do { \
  10. STATUS = (CALL); \
  11. } while ((STATUS < 0) && (errno == EINTR))
  12. #define RETRY_OR_RAISE_NULL(STATUS, CALL) \
  13. do { \
  14. while (1) { \
  15. STATUS = (CALL); \
  16. if (STATUS != NULL) \
  17. break; \
  18. else if (errno != EINTR) \
  19. s48_raise_os_error(errno); } \
  20. } while (0)
  21. #define RETRY_OR_RAISE_NEG(STATUS, CALL) \
  22. do { \
  23. while (1) { \
  24. STATUS = (CALL); \
  25. if (STATUS >= 0) \
  26. break; \
  27. else if (errno != EINTR) \
  28. s48_raise_os_error(errno); } \
  29. } while (0)