safe-read.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* An interface to read() that retries after interrupts.
  2. Copyright (C) 2002, 2006, 2009-2023 Free Software Foundation, Inc.
  3. This file is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU Lesser General Public License as
  5. published by the Free Software Foundation; either version 2.1 of the
  6. License, or (at your option) any later version.
  7. This file is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU Lesser General Public License for more details.
  11. You should have received a copy of the GNU Lesser General Public License
  12. along with this program. If not, see <https://www.gnu.org/licenses/>. */
  13. /* Some system calls may be interrupted and fail with errno = EINTR in the
  14. following situations:
  15. - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user
  16. types Ctrl-Z) on some platforms: Mac OS X.
  17. - The process receives a signal for which a signal handler was installed
  18. with sigaction() with an sa_flags field that does not contain
  19. SA_RESTART.
  20. - The process receives a signal for which a signal handler was installed
  21. with signal() and for which no call to siginterrupt(sig,0) was done,
  22. on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris.
  23. This module provides a wrapper around read() that handles EINTR. */
  24. #include <stddef.h>
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. #define SAFE_READ_ERROR ((size_t) -1)
  29. /* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted.
  30. Return the actual number of bytes read, zero for EOF, or SAFE_READ_ERROR
  31. upon error. */
  32. extern size_t safe_read (int fd, void *buf, size_t count);
  33. #ifdef __cplusplus
  34. }
  35. #endif