pike.git / src / modules / _Stdio / file.c

version» Context lines:

pike.git/src/modules/_Stdio/file.c:54:   #endif /* HAVE_SYS_FILE_H */      #ifdef HAVE_SYS_SOCKET_H   # include <sys/socket.h>   #endif      #ifdef HAVE_SYS_IOCTL_H   #include <sys/ioctl.h>   #endif    + #ifdef HAVE_SYS_STROPTS_H + #include <sys/stropts.h> + #endif +  + #ifdef HAVE_PTY_H + #include <pty.h> + #endif +    #ifdef HAVE_TERMIOS_H   #include <termios.h>   #else /* HAVE_SYS_TERMIOS_H */   /* NB: Deprecated by <termios.h> above. */   #include <sys/termios.h>   #endif      #ifdef HAVE_LINUX_IF_H   #include <linux/if.h>   #endif
pike.git/src/modules/_Stdio/file.c:2547:   #define HAVE_GRANTPT   #define grantpt(M) my_grantpt(M)   #endif   #endif      #ifndef HAVE_UNLOCKPT   #define HAVE_UNLOCKPT   #define unlockpt(m) 0   #endif    + #if !defined(HAVE_OPENPTY) && defined(HAVE_PTSNAME) && defined(HAVE_POSIX_OPENPT) + static int my_openpty(int *master, int *slave, void *ignored_name, +  void *ignored_termp, void *ignored_winp) + { +  int m = posix_openpt(O_RDWR | O_NOCTTY); +  int s; +  char *sname; +  if (m < 0) return -1; +  if (grantpt(m) && unlockpt(m) && (sname = ptsname(m))) { +  int s = open(sname, O_RDWR | O_NOCTTY); +  if (s >= 0) { +  if (master) *master = m; +  if (slave) *slave = s; + #ifdef I_PUSH +  /* Push required STREAMS modules. +  * cf pts(4D)/pts(7D) on Solaris. +  * +  * Not required on Solaris 11.4 and later. +  */ +  ioctl(s, I_PUSH, "ptem"); /* Pseudo terminal emulation mode */ +  ioctl(s, I_PUSH, "ldterm"); /* Terminal line discipline */ +  ioctl(s, I_PUSH, "ttcompat"); /* BSD terminal compatibility */ + #endif +  return 0; +  } +  } +  close(m); +  return -1; + } + #define HAVE_OPENPTY + #define openpty(M, S, N, T, W) my_openpty(M, S, N, T, W) + #endif +    /*! @decl string grantpt()    *!    *! If this file has been created by calling @[openpt()], return the    *! filename of the associated pts-file. This function should only be    *! called once.    *!    *! @returns    *! Returns the filename of the corresponding pts.    *!    *! @note
pike.git/src/modules/_Stdio/file.c:4420: Inside #if undefined(UNIX_SOCKETS_WORKS_WITH_SHUTDOWN)
   if(!(type & ~(SOCKET_CAPABILITIES)))    {    i=socketpair_ultra(AF_UNIX, SOCK_STREAM, 0, inout);    if (i >= 0) {    type=SOCKET_CAPABILITIES;    break;    }    }   #endif    + #ifdef HAVE_OPENPTY +  if (!(type & ~(TTY_CAPABILITIES))) +  { +  i = openpty(inout, inout + 1, NULL, NULL, NULL); +  if (i >= 0) { +  type = TTY_CAPABILITIES; +  break; +  } +  } + #endif +     if (!i) {    Pike_error("Cannot create a pipe matching those parameters.\n");    }    }while(0);       if ((i<0) || (inout[0] < 0) || (inout[1] < 0))    {    ERRNO=errno;    if (inout[0] >= 0) {    while (fd_close(inout[0]) && errno == EINTR) {}
pike.git/src/modules/_Stdio/file.c:5768:      /*! @decl constant NOTE_REVOKE = 64    *    * Used with @[Stdio.File()->set_fs_event_callback()] to monitor for access revokation (unmount, etc).    *    * @note    * Available on systems that use kqueue.    */       + /*! @decl constant PROP_TTY = 128 +  *! +  *! The @[Stdio.File] object supports tty operations. +  *! +  *! @seealso +  *! @[Stdio.File()->pipe()] +  */ +    /*! @decl constant PROP_SEND_FD = 64    *!    *! The @[Stdio.File] object might support the @[Stdio.File()->send_fd()]    *! operation.    *!    *! @seealso    *! @[Stdio.File()->pipe()], @[Stdio.File()->send_fd()],    *! @[Stdio.File()->receive_fd()]    */   
pike.git/src/modules/_Stdio/file.c:6191: Inside #if defined(HAVE_FSETXATTR)
   */    add_integer_constant("XATTR_REPLACE", XATTR_REPLACE, 0 );   #endif    add_integer_constant("PROP_IPC",fd_INTERPROCESSABLE,0);    add_integer_constant("PROP_NONBLOCK",fd_CAN_NONBLOCK,0);    add_integer_constant("PROP_SEND_FD",fd_SEND_FD,0);    add_integer_constant("PROP_SHUTDOWN",fd_CAN_SHUTDOWN,0);    add_integer_constant("PROP_BUFFERED",fd_BUFFERED,0);    add_integer_constant("PROP_BIDIRECTIONAL",fd_BIDIRECTIONAL,0);    add_integer_constant("PROP_REVERSE",fd_REVERSE,0); + #ifdef HAVE_OPENPTY +  add_integer_constant("PROP_TTY",fd_TTY,0); + #endif       add_integer_constant("PROP_IS_NONBLOCKING", FILE_NONBLOCKING, 0);       /* seek modes. These are strings to keep compatibility in seek(). */    {    static char seek_how[] = {    SEEK_CUR,0,    SEEK_SET,0,    SEEK_END,0   #ifdef SEEK_DATA