+2011-07-22 Corinna Vinschen <corinna@vinschen.de>
+
+ * fhandler_tty.cc (fhandler_pty_slave::ioctl): Drop FIONBIO case.
+ Handle FIONREAD.
+ (fhandler_pty_master::ioctl): Ditto. Call fhandler_base::ioctl to
+ decode default condition.
+ * fhandler_console.cc (fhandler_console::ioctl): Handle FIONREAD.
+
2011-07-21 Christopher Faylor <me.cygwin2011@cgf.cx>
Corinna Vinschen <corinna@vinschen.de>
#include "cygtls.h"
#include "tls_pbuf.h"
#include "registry.h"
+#include <asm/socket.h>
/* Don't make this bigger than NT_MAX_PATH as long as the temporary buffer
is allocated using tmp_pathbuf!!! */
*(unsigned char *) buf = (unsigned char) dev_state.nModifiers;
return 0;
}
- else
- {
- set_errno (EINVAL);
- return -1;
- }
+ set_errno (EINVAL);
+ return -1;
+ case FIONREAD:
+ {
+ DWORD n;
+ if (!GetNumberOfConsoleInputEvents (get_io_handle (), &n))
+ {
+ __seterrno ();
+ return -1;
+ }
+ *(int *) buf = (int) n;
+ return 0;
+ }
+ break;
}
return fhandler_base::ioctl (cmd, buf);
#include "shared_info.h"
#include "cygthread.h"
#include "child_info.h"
+#include <asm/socket.h>
#define close_maybe(h) \
do { \
case TIOCGWINSZ:
case TIOCSWINSZ:
break;
- case FIONBIO:
- set_nonblocking (*(int *) arg);
- retval = 0;
- goto out;
case TIOCGPGRP:
{
pid_t pid = this->tcgetpgrp ();
case TIOCSPGRP:
retval = this->tcsetpgrp ((pid_t) arg);
goto out;
+ case FIONREAD:
+ {
+ int n;
+ if (!PeekNamedPipe (get_handle (), NULL, 0, NULL, (DWORD *) &n, NULL))
+ {
+ __seterrno ();
+ retval = -1;
+ }
+ else
+ {
+ *(int *) arg = n;
+ retval = 0;
+ }
+ }
+ goto out;
default:
return fhandler_base::ioctl (cmd, arg);
}
break;
case TIOCSPGRP:
return this->tcsetpgrp ((pid_t) arg);
- case FIONBIO:
- set_nonblocking (*(int *) arg);
+ case FIONREAD:
+ {
+ int n;
+ if (!PeekNamedPipe (to_master, NULL, 0, NULL, (DWORD *) &n, NULL))
+ {
+ __seterrno ();
+ return -1;
+ }
+ *(int *) arg = n;
+ }
break;
default:
- set_errno (EINVAL);
- return -1;
+ return fhandler_base::ioctl (cmd, arg);
}
return 0;
}