if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row
|| get_ttyp ()->winsize.ws_col != ((struct winsize *) arg)->ws_col)
{
- get_ttyp ()->arg.winsize = *(struct winsize *) arg;
- if (ioctl_request_event)
- {
- get_ttyp ()->ioctl_retval = -1;
- SetEvent (ioctl_request_event);
- }
+ if (!ioctl_request_event)
+ get_ttyp ()->ioctl_retval = -EINVAL;
else
{
+ get_ttyp ()->arg.winsize = *(struct winsize *) arg;
+ SetEvent (ioctl_request_event);
get_ttyp ()->winsize = *(struct winsize *) arg;
kill (-get_ttyp ()->getpgid (), SIGWINCH);
+ if (ioctl_done_event)
+ WaitForSingleObject (ioctl_done_event, INFINITE);
}
- if (ioctl_done_event)
- WaitForSingleObject (ioctl_done_event, INFINITE);
}
break;
case TIOCLINUX:
- int val = * (unsigned char *) arg;
- if (val == 6 && ioctl_request_event && ioctl_done_event)
+ int val = *(unsigned char *) arg;
+ if (val != 6 || !ioctl_request_event || !ioctl_done_event)
+ get_ttyp ()->ioctl_retval = -EINVAL;
+ else
{
- get_ttyp ()->arg.value = val;
+ get_ttyp ()->arg.value = val;
SetEvent (ioctl_request_event);
WaitForSingleObject (ioctl_done_event, INFINITE);
- * (unsigned char *) arg = get_ttyp ()->arg.value & 0xFF;
- }
- else
- {
- get_ttyp ()->ioctl_retval = -1;
- set_errno (EINVAL);
+ *(unsigned char *) arg = get_ttyp ()->arg.value & 0xFF;
}
break;
}
release_output_mutex ();
out:
- termios_printf ("%d = ioctl (%x)", get_ttyp ()->ioctl_retval, cmd);
- return get_ttyp ()->ioctl_retval;
+ int retval = get_ttyp ()->ioctl_retval;
+ if (retval < 0)
+ {
+ set_errno (-retval);
+ retval = -1;
+ }
+ termios_printf ("%d = ioctl (%x)", retval, cmd);
+ return retval;
}
/*******************************************************
switch (cmd)
{
case TIOCPKT:
- pktmode = * (int *) arg;
+ pktmode = *(int *) arg;
break;
case TIOCGWINSZ:
*(struct winsize *) arg = get_ttyp ()->winsize;
if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row
|| 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);
}
break;
--- /dev/null
+/* 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