CSyscallUtils.h 556 B

12345678910111213141516171819202122232425
  1. #pragma once
  2. #include <errno.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <AK/StdLibExtras.h>
  6. namespace CSyscallUtils {
  7. template <typename Syscall, class... Args>
  8. inline int safe_syscall(Syscall syscall, Args&& ... args) {
  9. for (;;) {
  10. int sysret = syscall(forward<Args>(args)...);
  11. if (sysret == -1) {
  12. dbgprintf("CSafeSyscall: %d (%d: %s)\n", sysret, errno, strerror(errno));
  13. if (errno == EINTR)
  14. continue;
  15. ASSERT_NOT_REACHED();
  16. }
  17. return sysret;
  18. }
  19. }
  20. }