]> sourceware.org Git - newlib-cygwin.git/commitdiff
* fhandler_tty.cc (fhandler_tty_slave::ioctl): Properly set ioctl_request event
authorChristopher Faylor <me@cgf.cx>
Sat, 27 Sep 2003 03:14:07 +0000 (03:14 +0000)
committerChristopher Faylor <me@cgf.cx>
Sat, 27 Sep 2003 03:14:07 +0000 (03:14 +0000)
when window size changes.  Store failing errno in ioctl_retval (needed?).

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_tty.cc
winsup/cygwin/include/cygwin/kd.h [new file with mode: 0644]

index 75495eafd6fcd0826e66a2ccfa99effa8da94af5..5b1306d7512c5fd6460b01a95ad6b787962dd5c8 100644 (file)
@@ -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>
 
        * fhandler_console.c (fhandler_console::read): Record the state of the
index 87aaca73a1096108b0ccc2b58678800750f508fd..e94fe4787498d7f29e2fb769be8671d1b223b2aa 100644 (file)
@@ -1057,34 +1057,29 @@ fhandler_tty_slave::ioctl (unsigned int cmd, void *arg)
       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;
     }
@@ -1092,8 +1087,14 @@ fhandler_tty_slave::ioctl (unsigned int cmd, void *arg)
   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;
 }
 
 /*******************************************************
@@ -1250,7 +1251,7 @@ fhandler_pty_master::ioctl (unsigned int cmd, void *arg)
   switch (cmd)
     {
       case TIOCPKT:
-       pktmode = * (int *) arg;
+       pktmode = *(int *) arg;
        break;
       case TIOCGWINSZ:
        *(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
            || 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;
diff --git a/winsup/cygwin/include/cygwin/kd.h b/winsup/cygwin/include/cygwin/kd.h
new file mode 100644 (file)
index 0000000..e157eb8
--- /dev/null
@@ -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
This page took 0.041505 seconds and 5 git commands to generate.