diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 868bc89d5..091c256b4 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +2002-01-06 Corinna Vinschen + + * ioctl.cc (ioctl): Make third argument optional. + * include/sys/ioctl.h: Ditto in declaration. + * dtable.cc (dtable::init_std_file_from_handle): Revert previous + bogus patch. + * window.cc (WndProc): Raise SIGURG instead of SIGIO in case of FD_OOB + message. + 2002-01-05 Christopher Faylor * dir.cc (opendir): Guarantee release of alloced fhandler structure on diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 0fe747e43..a6f5b075c 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -196,7 +196,7 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle, DWORD myaccess) first_fd_for_open = 0; - if (handle == INVALID_HANDLE_VALUE) + if (!handle || handle == INVALID_HANDLE_VALUE) return; if (__fmode) diff --git a/winsup/cygwin/include/sys/ioctl.h b/winsup/cygwin/include/sys/ioctl.h index 93f73a69c..a2e73e7a7 100644 --- a/winsup/cygwin/include/sys/ioctl.h +++ b/winsup/cygwin/include/sys/ioctl.h @@ -23,7 +23,7 @@ details. */ __BEGIN_DECLS -int ioctl (int __fd, int __cmd, void *); +int ioctl (int __fd, int __cmd, ...); __END_DECLS diff --git a/winsup/cygwin/ioctl.cc b/winsup/cygwin/ioctl.cc index 98c157800..95986a6c0 100644 --- a/winsup/cygwin/ioctl.cc +++ b/winsup/cygwin/ioctl.cc @@ -23,25 +23,31 @@ details. */ #include extern "C" int -ioctl (int fd, int cmd, void *buf) +ioctl (int fd, int cmd, ...) { cygheap_fdget cfd (fd); if (cfd < 0) return -1; + /* check for optional mode argument */ + va_list ap; + va_start (ap, cmd); + char *argp = va_arg (ap, char *); + va_end (ap); + debug_printf ("fd %d, cmd %x\n", fd, cmd); if (cfd->is_tty () && cfd->get_device () != FH_PTYM) switch (cmd) { case TCGETA: - return tcgetattr (fd, (struct termios *) buf); + return tcgetattr (fd, (struct termios *) argp); case TCSETA: - return tcsetattr (fd, TCSANOW, (struct termios *) buf); + return tcsetattr (fd, TCSANOW, (struct termios *) argp); case TCSETAW: - return tcsetattr (fd, TCSADRAIN, (struct termios *) buf); + return tcsetattr (fd, TCSADRAIN, (struct termios *) argp); case TCSETAF: - return tcsetattr (fd, TCSAFLUSH, (struct termios *) buf); + return tcsetattr (fd, TCSAFLUSH, (struct termios *) argp); } - return cfd->ioctl (cmd, buf); + return cfd->ioctl (cmd, argp); } diff --git a/winsup/cygwin/window.cc b/winsup/cygwin/window.cc index 953f603ba..2a1dafb62 100644 --- a/winsup/cygwin/window.cc +++ b/winsup/cygwin/window.cc @@ -18,6 +18,8 @@ details. */ #include #include #include +#define USE_SYS_TYPES_FD_SET +#include #include #include "cygerrno.h" #include "perprocess.h" @@ -61,7 +63,10 @@ WndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } return 0; case WM_ASYNCIO: - raise (SIGIO); + if (WSAGETSELECTEVENT(lParam) == FD_OOB) + raise (SIGURG); + else + raise (SIGIO); return 0; default: return DefWindowProc (hwnd, uMsg, wParam, lParam);