* fhandler_tty.cc (fhandler_tty_slave::ioctl): Properly set ioctl_request event
when window size changes. Store failing errno in ioctl_retval (needed?).
This commit is contained in:
		| @@ -1,3 +1,9 @@ | |||||||
|  | 2003-09-26  Christopher Faylor  <cgf@redhat.com> | ||||||
|  |  | ||||||
|  | 	* fhandler_tty.cc (fhandler_tty_slave::ioctl): Properly set | ||||||
|  | 	ioctl_request event when window size changes.  Store failing errno in | ||||||
|  | 	ioctl_retval (needed?). | ||||||
|  |  | ||||||
| 2003-09-26  Pavel Tsekov  <ptsekov@gmx.net> | 2003-09-26  Pavel Tsekov  <ptsekov@gmx.net> | ||||||
|  |  | ||||||
| 	* fhandler_console.c (fhandler_console::read): Record the state of the | 	* fhandler_console.c (fhandler_console::read): Record the state of the | ||||||
|   | |||||||
| @@ -1057,34 +1057,29 @@ fhandler_tty_slave::ioctl (unsigned int cmd, void *arg) | |||||||
|       if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row |       if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row | ||||||
| 	  || get_ttyp ()->winsize.ws_col != ((struct winsize *) arg)->ws_col) | 	  || get_ttyp ()->winsize.ws_col != ((struct winsize *) arg)->ws_col) | ||||||
| 	{ | 	{ | ||||||
| 	  get_ttyp ()->arg.winsize = *(struct winsize *) arg; | 	  if (!ioctl_request_event) | ||||||
| 	  if (ioctl_request_event) | 	    get_ttyp ()->ioctl_retval = -EINVAL; | ||||||
| 	    { |  | ||||||
| 	      get_ttyp ()->ioctl_retval = -1; |  | ||||||
| 	      SetEvent (ioctl_request_event); |  | ||||||
| 	    } |  | ||||||
| 	  else | 	  else | ||||||
| 	    { | 	    { | ||||||
|  | 	      get_ttyp ()->arg.winsize = *(struct winsize *) arg; | ||||||
|  | 	      SetEvent (ioctl_request_event); | ||||||
| 	      get_ttyp ()->winsize = *(struct winsize *) arg; | 	      get_ttyp ()->winsize = *(struct winsize *) arg; | ||||||
| 	      kill (-get_ttyp ()->getpgid (), SIGWINCH); | 	      kill (-get_ttyp ()->getpgid (), SIGWINCH); | ||||||
|  | 	      if (ioctl_done_event) | ||||||
|  | 		WaitForSingleObject (ioctl_done_event, INFINITE); | ||||||
| 	    } | 	    } | ||||||
| 	  if (ioctl_done_event) |  | ||||||
| 	    WaitForSingleObject (ioctl_done_event, INFINITE); |  | ||||||
| 	} | 	} | ||||||
|       break; |       break; | ||||||
|     case TIOCLINUX: |     case TIOCLINUX: | ||||||
|       int val = * (unsigned char *) arg; |       int val = *(unsigned char *) arg; | ||||||
|       if (val == 6 && ioctl_request_event && ioctl_done_event) |       if (val != 6 || !ioctl_request_event || !ioctl_done_event) | ||||||
| 	{ | 	  get_ttyp ()->ioctl_retval = -EINVAL; | ||||||
| 	  get_ttyp ()->arg.value = val;  |  | ||||||
| 	  SetEvent (ioctl_request_event); |  | ||||||
| 	  WaitForSingleObject (ioctl_done_event, INFINITE); |  | ||||||
| 	  * (unsigned char *) arg = get_ttyp ()->arg.value & 0xFF; |  | ||||||
| 	} |  | ||||||
|       else |       else | ||||||
| 	{ | 	{ | ||||||
| 	  get_ttyp ()->ioctl_retval = -1; | 	  get_ttyp ()->arg.value = val; | ||||||
| 	  set_errno (EINVAL); | 	  SetEvent (ioctl_request_event); | ||||||
|  | 	  WaitForSingleObject (ioctl_done_event, INFINITE); | ||||||
|  | 	  *(unsigned char *) arg = get_ttyp ()->arg.value & 0xFF; | ||||||
| 	} | 	} | ||||||
|       break; |       break; | ||||||
|     } |     } | ||||||
| @@ -1092,8 +1087,14 @@ fhandler_tty_slave::ioctl (unsigned int cmd, void *arg) | |||||||
|   release_output_mutex (); |   release_output_mutex (); | ||||||
|  |  | ||||||
| out: | out: | ||||||
|   termios_printf ("%d = ioctl (%x)", get_ttyp ()->ioctl_retval, cmd); |   int retval = get_ttyp ()->ioctl_retval; | ||||||
|   return get_ttyp ()->ioctl_retval; |   if (retval < 0) | ||||||
|  |     { | ||||||
|  |       set_errno (-retval); | ||||||
|  |       retval = -1; | ||||||
|  |     } | ||||||
|  |   termios_printf ("%d = ioctl (%x)", retval, cmd); | ||||||
|  |   return retval; | ||||||
| } | } | ||||||
|  |  | ||||||
| /******************************************************* | /******************************************************* | ||||||
| @@ -1250,7 +1251,7 @@ fhandler_pty_master::ioctl (unsigned int cmd, void *arg) | |||||||
|   switch (cmd) |   switch (cmd) | ||||||
|     { |     { | ||||||
|       case TIOCPKT: |       case TIOCPKT: | ||||||
| 	pktmode = * (int *) arg; | 	pktmode = *(int *) arg; | ||||||
| 	break; | 	break; | ||||||
|       case TIOCGWINSZ: |       case TIOCGWINSZ: | ||||||
| 	*(struct winsize *) arg = get_ttyp ()->winsize; | 	*(struct winsize *) arg = get_ttyp ()->winsize; | ||||||
| @@ -1259,7 +1260,7 @@ fhandler_pty_master::ioctl (unsigned int cmd, void *arg) | |||||||
| 	if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row | 	if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row | ||||||
| 	    || get_ttyp ()->winsize.ws_col != ((struct winsize *) arg)->ws_col) | 	    || get_ttyp ()->winsize.ws_col != ((struct winsize *) arg)->ws_col) | ||||||
| 	  { | 	  { | ||||||
| 	    get_ttyp ()->winsize = * (struct winsize *) arg; | 	    get_ttyp ()->winsize = *(struct winsize *) arg; | ||||||
| 	    kill (-get_ttyp ()->getpgid (), SIGWINCH); | 	    kill (-get_ttyp ()->getpgid (), SIGWINCH); | ||||||
| 	  } | 	  } | ||||||
| 	break; | 	break; | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								winsup/cygwin/include/cygwin/kd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								winsup/cygwin/include/cygwin/kd.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | /* cygwin/kd.h | ||||||
|  |  | ||||||
|  |    Copyright 2003 Red Hat Inc. | ||||||
|  |    Written by Kazuhiro Fujieda <fujieda@jaist.ac.jp> | ||||||
|  |  | ||||||
|  | This file is part of Cygwin. | ||||||
|  |  | ||||||
|  | This software is a copyrighted work licensed under the terms of the | ||||||
|  | Cygwin license.  Please consult the file "CYGWIN_LICENSE" for | ||||||
|  | details. */ | ||||||
|  |  | ||||||
|  | #ifndef _CYGWIN_KD_H_ | ||||||
|  | #define _CYGWIN_KD_H_ | ||||||
|  |  | ||||||
|  | #define KDGKBMETA 0x4b62 | ||||||
|  | #define KDSKBMETA 0x4b63 | ||||||
|  | #define K_METABIT 0x03 | ||||||
|  | #define K_ESCPREFIX 0x04 | ||||||
|  |  | ||||||
|  | #endif | ||||||
		Reference in New Issue
	
	Block a user