pty.c 636 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include <stdlib.h>
  2. #include <sys/ioctl.h>
  3. #include <stdio.h>
  4. #include <fcntl.h>
  5. #include <errno.h>
  6. #include "syscall.h"
  7. int posix_openpt(int flags)
  8. {
  9. int r = open("/dev/ptmx", flags);
  10. if (r < 0 && errno == ENOSPC) errno = EAGAIN;
  11. return r;
  12. }
  13. int grantpt(int fd)
  14. {
  15. return 0;
  16. }
  17. int unlockpt(int fd)
  18. {
  19. int unlock = 0;
  20. return ioctl(fd, TIOCSPTLCK, &unlock);
  21. }
  22. int __ptsname_r(int fd, char *buf, size_t len)
  23. {
  24. int pty, err;
  25. if (!buf) len = 0;
  26. if ((err = __syscall(SYS_ioctl, fd, TIOCGPTN, &pty))) return -err;
  27. if (snprintf(buf, len, "/dev/pts/%d", pty) >= len) return ERANGE;
  28. return 0;
  29. }
  30. weak_alias(__ptsname_r, ptsname_r);