Contents|Index|Previous|Next

# Reentrant covers for OS subroutines

Since the system subroutines are used by other library routines that require reentrancy, libc.a provides cover routines (for example, the reentrant version of fork is _fork_r). These cover routines are consistent with the other reentrant subroutines in this library, and achieve reentrancy by using a reserved global data block (see “Reentrancy” for more discussion). The following discussion describes the routines.

- _open_r
  A reentrant version of open. It takes a pointer to the global data block which holds errno.

    int _open_r(void *reent,
       const char *file, int flags, int mode);

- _close_r
  A reentrant version of close. It takes a pointer to the global data block which holds errno.

    int _close_r(void *reent, int fd);

- _lseek_r
  A reentrant version of lseek. It takes a pointer to the global data block which holds errno.

    off_t _lseek_r(void *reent,
       int fd, off_t pos, int whence);

- _read_r
  A reentrant version of read. It takes a pointer to the global data block which holds errno.

    long _read_r(void *reent,
       int fd, void *buf, size_t cnt);

- _write_r
  A reentrant version of write. It takes a pointer to the global data block which holds errno.

    long _write_r(void *reent,
       int fd, const void *buf, size_t cnt);

- _fork_r
  A reentrant version of fork. It takes a pointer to the global data block which holds errno.

    int _fork_r(void *reent);

- _wait_r
  A reentrant version of wait. It takes a pointer to the global data block which holds errno.

    int _wait_r(void *reent, int *status);

- _stat_r
  A reentrant version of stat. It takes a pointer to the global data block which holds errno.

    int _stat_r(void *reent,
       const char *file, struct stat *pstat);

- _fstat_r
  A reentrant version of fstat. It takes a pointer to the global data block which holds errno.

    int _fstat_r(void *reent, int fd,
       struct stat *pstat);

- _link_r
  A reentrant version of link. It takes a pointer to the global data block which holds errno.

    int _link_r(void *reent,
       const char *old, const char *new);

- _unlink_r
  A reentrant version of unlink. It takes a pointer to the global data block which holds errno.

    int _unlink_r(void *reent, const char *file);

- _sbrk_r
  A reentrant version of sbrk. It takes a pointer to the global data block which holds errno.

    char *_sbrk_r(void *reent, size_t incr);