* 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.
This commit is contained in:
		| @@ -1,3 +1,12 @@ | |||||||
|  | 2002-01-06  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
|  | 	* 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  <cgf@redhat.com> | 2002-01-05  Christopher Faylor  <cgf@redhat.com> | ||||||
|  |  | ||||||
| 	* dir.cc (opendir): Guarantee release of alloced fhandler structure on | 	* dir.cc (opendir): Guarantee release of alloced fhandler structure on | ||||||
|   | |||||||
| @@ -196,7 +196,7 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle, DWORD myaccess) | |||||||
|  |  | ||||||
|   first_fd_for_open = 0; |   first_fd_for_open = 0; | ||||||
|  |  | ||||||
|   if (handle == INVALID_HANDLE_VALUE) |   if (!handle || handle == INVALID_HANDLE_VALUE) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   if (__fmode) |   if (__fmode) | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ details. */ | |||||||
|  |  | ||||||
| __BEGIN_DECLS | __BEGIN_DECLS | ||||||
|  |  | ||||||
| int ioctl (int __fd, int __cmd, void *); | int ioctl (int __fd, int __cmd, ...); | ||||||
|  |  | ||||||
| __END_DECLS | __END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,25 +23,31 @@ details. */ | |||||||
| #include <sys/termios.h> | #include <sys/termios.h> | ||||||
|  |  | ||||||
| extern "C" int | extern "C" int | ||||||
| ioctl (int fd, int cmd, void *buf) | ioctl (int fd, int cmd, ...) | ||||||
| { | { | ||||||
|   cygheap_fdget cfd (fd); |   cygheap_fdget cfd (fd); | ||||||
|   if (cfd < 0) |   if (cfd < 0) | ||||||
|     return -1; |     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); |   debug_printf ("fd %d, cmd %x\n", fd, cmd); | ||||||
|   if (cfd->is_tty () && cfd->get_device () != FH_PTYM) |   if (cfd->is_tty () && cfd->get_device () != FH_PTYM) | ||||||
|     switch (cmd) |     switch (cmd) | ||||||
|       { |       { | ||||||
| 	case TCGETA: | 	case TCGETA: | ||||||
| 	  return tcgetattr (fd, (struct termios *) buf); | 	  return tcgetattr (fd, (struct termios *) argp); | ||||||
| 	case TCSETA: | 	case TCSETA: | ||||||
| 	  return tcsetattr (fd, TCSANOW, (struct termios *) buf); | 	  return tcsetattr (fd, TCSANOW, (struct termios *) argp); | ||||||
| 	case TCSETAW: | 	case TCSETAW: | ||||||
| 	  return tcsetattr (fd, TCSADRAIN, (struct termios *) buf); | 	  return tcsetattr (fd, TCSADRAIN, (struct termios *) argp); | ||||||
| 	case TCSETAF: | 	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); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -18,6 +18,8 @@ details. */ | |||||||
| #include <limits.h> | #include <limits.h> | ||||||
| #include <wingdi.h> | #include <wingdi.h> | ||||||
| #include <winuser.h> | #include <winuser.h> | ||||||
|  | #define USE_SYS_TYPES_FD_SET | ||||||
|  | #include <winsock2.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #include "cygerrno.h" | #include "cygerrno.h" | ||||||
| #include "perprocess.h" | #include "perprocess.h" | ||||||
| @@ -61,7 +63,10 @@ WndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) | |||||||
| 	} | 	} | ||||||
|       return 0; |       return 0; | ||||||
|     case WM_ASYNCIO: |     case WM_ASYNCIO: | ||||||
|       raise (SIGIO); |       if (WSAGETSELECTEVENT(lParam) == FD_OOB) | ||||||
|  |         raise (SIGURG); | ||||||
|  |       else | ||||||
|  | 	raise (SIGIO); | ||||||
|       return 0; |       return 0; | ||||||
|     default: |     default: | ||||||
|       return DefWindowProc (hwnd, uMsg, wParam, lParam); |       return DefWindowProc (hwnd, uMsg, wParam, lParam); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user