]> sourceware.org Git - newlib-cygwin.git/commitdiff
* autoload.cc (noload): Use proper method for multiline strings or newer gcc's
authorChristopher Faylor <me@cgf.cx>
Sun, 11 Mar 2001 01:58:23 +0000 (01:58 +0000)
committerChristopher Faylor <me@cgf.cx>
Sun, 11 Mar 2001 01:58:23 +0000 (01:58 +0000)
complain.
* exceptions.cc (unused_sig_wrapper): Ditto.
* fhandler.h (fhandler_base): Make get_io_handle and friends return self.
* fhandler_tty.cc (fhandler_pty_common::close_on_exec): Accomodate DEBUGGING
flag to avoid spurious warnings when inheritance is set.

winsup/cygwin/ChangeLog
winsup/cygwin/autoload.cc
winsup/cygwin/exceptions.cc
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_tty.cc

index 088a901553ec4bdfb03069c85ba914898afbee50..6f97478f6d64fad3dffd9a6af932cc10811c4bb4 100644 (file)
@@ -1,3 +1,13 @@
+Sat Mar 10 20:54:47 2001  Christopher Faylor <cgf@cygnus.com>
+
+       * autoload.cc (noload): Use proper method for multiline strings or
+       newer gcc's complain.
+       * exceptions.cc (unused_sig_wrapper): Ditto.
+       * fhandler.h (fhandler_base): Make get_io_handle and friends return
+       self.
+       * fhandler_tty.cc (fhandler_pty_common::close_on_exec): Accomodate
+       DEBUGGING flag to avoid spurious warnings when inheritance is set.
+
 Sat Mar 10 16:52:12 2001  Christopher Faylor <cgf@cygnus.com>
 
        * shortcut.c (PATH_ALL_EXEC): Add parentheses to avoid a compiler
index a22d72d38bf2200fb060b2b6358e3ed45ea17680..850c020efe22c423b2286dbe6989892f4a9457dd 100644 (file)
@@ -24,45 +24,45 @@ struct DLLinfo
 };
 
 /* FIXME: This is not thread-safe! */
-__asm__ ("
-msg1:
-  .ascii \"couldn't dynamically determine load address for '%s' (handle %p), %E\\0\"
-
-  .align 32
-noload:
-  popl %edx            # Get the address of the information block
-  movl 8(%edx),%eax    # Should we 'ignore' the lack
-  test $1,%eax         #  of this function?
-  jz 1f                        # Nope.
-  decl %eax            # Yes.  This is the # of bytes + 1
-  popl %edx            # Caller's caller
-  addl %eax,%esp       # Pop off bytes
-  xor %eax,%eax                # Zero functional return
-  jmp *%edx            # Return
-1:
-  movl 4(%edx),%eax    # Handle value
-  pushl (%eax)
-  leal 12(%edx),%eax   # Location of name of function
-  push %eax
-  push $msg1           # The message
-  call ___api_fatal    # Print message. Never returns
-
-  .globl cygwin_dll_func_load
-cygwin_dll_func_load:
-  movl (%esp),%eax     # 'Return address' contains load info
-  addl $12,%eax                # Address of name of function to load
-  pushl %eax           # Second argument
-  movl -8(%eax),%eax   # Address of Handle to DLL
-  pushl (%eax)         # Handle to DLL
-  call _GetProcAddress@8# Load it
-  test %eax,%eax       # Success?
-  jne gotit            # Yes
-  jmp noload           # Issue an error or return
-gotit:
-  popl %ecx            # Pointer to 'return address'
-  movb $0xe0,-1(%ecx)  # Turn preceding call to a jmp *%eax
-  movl %eax,(%ecx)     # Point dispatch to address loaded above
-  jmp *%eax
+__asm__ ("\n\
+msg1:\n\
+  .ascii \"couldn't dynamically determine load address for '%s' (handle %p), %E\\0\"\n\
+\n\
+  .align 32\n\
+noload:\n\
+  popl %edx            # Get the address of the information block\n\
+  movl 8(%edx),%eax    # Should we 'ignore' the lack\n\
+  test $1,%eax         #  of this function?\n\
+  jz 1f                        # Nope.\n\
+  decl %eax            # Yes.  This is the # of bytes + 1\n\
+  popl %edx            # Caller's caller\n\
+  addl %eax,%esp       # Pop off bytes\n\
+  xor %eax,%eax                # Zero functional return\n\
+  jmp *%edx            # Return\n\
+1:\n\
+  movl 4(%edx),%eax    # Handle value\n\
+  pushl (%eax)\n\
+  leal 12(%edx),%eax   # Location of name of function\n\
+  push %eax\n\
+  push $msg1           # The message\n\
+  call ___api_fatal    # Print message. Never returns\n\
+\n\
+  .globl cygwin_dll_func_load\n\
+cygwin_dll_func_load:\n\
+  movl (%esp),%eax     # 'Return address' contains load info\n\
+  addl $12,%eax                # Address of name of function to load\n\
+  pushl %eax           # Second argument\n\
+  movl -8(%eax),%eax   # Address of Handle to DLL\n\
+  pushl (%eax)         # Handle to DLL\n\
+  call _GetProcAddress@8# Load it\n\
+  test %eax,%eax       # Success?\n\
+  jne gotit            # Yes\n\
+  jmp noload           # Issue an error or return\n\
+gotit:\n\
+  popl %ecx            # Pointer to 'return address'\n\
+  movb $0xe0,-1(%ecx)  # Turn preceding call to a jmp *%eax\n\
+  movl %eax,(%ecx)     # Point dispatch to address loaded above\n\
+  jmp *%eax\n\
 ");
 
 LoadDLLinitfunc (advapi32)
index 6e1ae4591f850c4c11eddfd028664c36a27c9c09..c0d88a81500efc496084c80a8ab3183b5164e1a4 100644 (file)
@@ -1144,69 +1144,69 @@ void unused_sig_wrapper ()
    prototype signal handlers as __stdcall), calls _set_process_mask
    to restore any mask, restores any potentially clobbered registers
    and returns to original caller. */
-__asm__ volatile ("
-       .text
-
-_sigreturn:
-       addl    $4,%%esp        # Remove argument
-       movl    %%esp,%%ebp
-       addl    $36,%%ebp
-
-       cmpl    $0,%4           # Did a signal come in?
-       jz      1f              # No, if zero
-       call    _call_signal_handler@0 # yes handle the signal
-
-# FIXME: There is a race here.  The signal handler could set up
-# the sigsave structure between _call_signal_handler and the
-# end of _set_process_mask.  This would make cygwin detect an
-# incorrect signal mask.
-
-1:     call    _set_process_mask@4
-       popl    %%eax           # saved errno
-       testl   %%eax,%%eax     # Is it < 0
-       jl      2f              # yup.  ignore it
-       movl    %1,%%ebx
-       movl    %%eax,(%%ebx)
-2:     popl    %%eax
-       popl    %%ebx
-       popl    %%ecx
-       popl    %%edx
-       popl    %%edi
-       popl    %%esi
-       popf
-       popl    %%ebp
-       ret
-
-__no_sig_start:
-_sigdelayed:
-       pushl   %2                      # original return address
-_sigdelayed0:
-       pushl   %%ebp
-       movl    %%esp,%%ebp
-       pushf
-       pushl   %%esi
-       pushl   %%edi
-       pushl   %%edx
-       pushl   %%ecx
-       pushl   %%ebx
-       pushl   %%eax
-       pushl   %7                      # saved errno
-       pushl   %3                      # oldmask
-       pushl   %4                      # signal argument
-       pushl   $_sigreturn
-
-       call    _reset_signal_arrived@0
-       pushl   %5                      # signal number
-       movl    $0,%0                   # zero the signal number as a
-                                       # flag to the signal handler thread
-                                       # that it is ok to set up sigsave
-
-       pushl   %8
-       call    _set_process_mask@4
-       popl    %%eax
-       jmp     *%%eax
-__no_sig_end:
-
+__asm__ volatile ("\n\
+       .text\n\
+\n\
+_sigreturn:\n\
+       addl    $4,%%esp        # Remove argument\n\
+       movl    %%esp,%%ebp\n\
+       addl    $36,%%ebp\n\
+\n\
+       cmpl    $0,%4           # Did a signal come in?\n\
+       jz      1f              # No, if zero\n\
+       call    _call_signal_handler@0 # yes handle the signal\n\
+\n\
+# FIXME: There is a race here.  The signal handler could set up\n\
+# the sigsave structure between _call_signal_handler and the\n\
+# end of _set_process_mask.  This would make cygwin detect an\n\
+# incorrect signal mask.\n\
+\n\
+1:     call    _set_process_mask@4\n\
+       popl    %%eax           # saved errno\n\
+       testl   %%eax,%%eax     # Is it < 0\n\
+       jl      2f              # yup.  ignore it\n\
+       movl    %1,%%ebx\n\
+       movl    %%eax,(%%ebx)\n\
+2:     popl    %%eax\n\
+       popl    %%ebx\n\
+       popl    %%ecx\n\
+       popl    %%edx\n\
+       popl    %%edi\n\
+       popl    %%esi\n\
+       popf\n\
+       popl    %%ebp\n\
+       ret\n\
+\n\
+__no_sig_start:\n\
+_sigdelayed:\n\
+       pushl   %2                      # original return address\n\
+_sigdelayed0:\n\
+       pushl   %%ebp\n\
+       movl    %%esp,%%ebp\n\
+       pushf\n\
+       pushl   %%esi\n\
+       pushl   %%edi\n\
+       pushl   %%edx\n\
+       pushl   %%ecx\n\
+       pushl   %%ebx\n\
+       pushl   %%eax\n\
+       pushl   %7                      # saved errno\n\
+       pushl   %3                      # oldmask\n\
+       pushl   %4                      # signal argument\n\
+       pushl   $_sigreturn\n\
+\n\
+       call    _reset_signal_arrived@0\n\
+       pushl   %5                      # signal number\n\
+       movl    $0,%0                   # zero the signal number as a\n\
+                                       # flag to the signal handler thread\n\
+                                       # that it is ok to set up sigsave\n\
+\n\
+       pushl   %8\n\
+       call    _set_process_mask@4\n\
+       popl    %%eax\n\
+       jmp     *%%eax\n\
+__no_sig_end:\n\
+\n\
 " : "=m" (sigsave.sig) : "m" (&_impure_ptr->_errno),
   "g" (sigsave.retaddr), "g" (sigsave.oldmask), "g" (sigsave.sig),
     "g" (sigsave.func), "o" (pid_offset), "g" (sigsave.saved_errno), "g" (sigsave.newmask)
index c4f931d63d8e018697744e8825dc363b2d00a4d9..1553f0ef52c00aaafc90135e78191432c1540769 100644 (file)
@@ -317,9 +317,9 @@ public:
 
   /* Virtual accessor functions to hide the fact
      that some fd's have two handles. */
-  virtual HANDLE get_handle () const { return io_handle; }
-  virtual HANDLE get_io_handle () const { return io_handle; }
-  virtual HANDLE get_output_handle () const { return io_handle; }
+  virtual HANDLE& get_handle () { return io_handle; }
+  virtual HANDLE& get_io_handle () { return io_handle; }
+  virtual HANDLE& get_output_handle () { return io_handle; }
   virtual BOOL hit_eof () {return FALSE;}
   virtual select_record *select_read (select_record *s);
   virtual select_record *select_write (select_record *s);
@@ -347,7 +347,7 @@ private:
 public:
   fhandler_socket (const char *name = 0);
   ~fhandler_socket ();
-  int get_socket () const { return (int) get_handle(); }
+  int get_socket () { return (int) get_handle(); }
   fhandler_socket * is_socket () { return this; }
   int write (const void *ptr, size_t len);
   int read (void *ptr, size_t len);
@@ -570,7 +570,7 @@ public:
   {
     // nothing to do
   }
-  HANDLE get_output_handle () const { return output_handle; }
+  HANDLE& get_output_handle () { return output_handle; }
   int line_edit (const char *rptr, int nread, int always_accept = 0);
   void set_output_handle (HANDLE h) { output_handle = h; }
   void tcinit (tty_min *this_tc, int force = FALSE);
index 909264dc920cfd2e094f97635c92a4e7ee5a5f85..705910e18acc43a6ae33cd86e0692f83f1c5f2d5 100644 (file)
@@ -1,6 +1,6 @@
 /* fhandler_tty.cc
 
-   Copyright 1997, 1998, 2000 Cygnus Solutions.
+   Copyright 1997, 1998, 2000, 2001 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -144,7 +144,7 @@ fhandler_tty_common::__release_output_mutex (const char *fn, int ln)
       if (osi > 0)
        osi--;
       termios_printf ("released at %s:%d, osi %d", fn, ln, osi);
-      termios_printf("  for %s:%d (%s)", ostack[osi].fn, ostack[osi].ln, ostack[osi].tname);
+      termios_printf ("  for %s:%d (%s)", ostack[osi].fn, ostack[osi].ln, ostack[osi].tname);
       ostack[osi].ln = -ln;
 #endif
     }
@@ -173,7 +173,7 @@ fhandler_pty_master::accept_input ()
 
   n = get_ttyp ()->read_retval = eat_readahead (-1);
 
-  if ( n != 0 )
+  if (n != 0)
     {
       termios_printf ("about to write %d chars to slave", n);
       rc = WriteFile (get_output_handle (), rabuf, n, &written, NULL);
@@ -411,21 +411,21 @@ process_ioctl (void *)
 /**********************************************************************/
 /* Tty slave stuff */
 
-fhandler_tty_slave::fhandler_tty_slave(int num, const char *name) :
+fhandler_tty_slave::fhandler_tty_slave (int num, const char *name) :
        fhandler_tty_common (FH_TTYS, name, num)
 {
   set_cb (sizeof *this);
   ttynum = num;
   /* FIXME: This is wasteful.  We should rewrite the set_name path to eliminate the
      need for double allocates. */
-  unix_path_name_ = (char *) crealloc (unix_path_name_, strlen(win32_path_name_) + 1);
+  unix_path_name_ = (char *) crealloc (unix_path_name_, strlen (win32_path_name_) + 1);
   strcpy (unix_path_name_, win32_path_name_);
   unix_path_name_[0] = unix_path_name_[4] = '/';
   debug_printf ("unix '%s', win32 '%s'", unix_path_name_, win32_path_name_);
   inuse = NULL;
 }
 
-fhandler_tty_slave::fhandler_tty_slave(const char *name) :
+fhandler_tty_slave::fhandler_tty_slave (const char *name) :
        fhandler_tty_common (FH_TTYS, name, 0)
 {
   set_cb (sizeof *this);
@@ -452,13 +452,13 @@ fhandler_tty_slave::open (const char *, int flags, mode_t)
   __small_sprintf (buf, OUTPUT_DONE_EVENT, ttynum);
   output_done_event = OpenEvent (EVENT_ALL_ACCESS, TRUE, buf);
 
-  if (!(output_mutex = get_ttyp()->open_output_mutex (TRUE)))
+  if (!(output_mutex = get_ttyp ()->open_output_mutex (TRUE)))
     {
       termios_printf ("open output mutex failed, %E");
       __seterrno ();
       return 0;
     }
-  if (!(input_mutex = get_ttyp()->open_input_mutex (TRUE)))
+  if (!(input_mutex = get_ttyp ()->open_input_mutex (TRUE)))
     {
       termios_printf ("open input mutex failed, %E");
       __seterrno ();
@@ -500,7 +500,7 @@ fhandler_tty_slave::open (const char *, int flags, mode_t)
                                     get_ttyp ()->master_pid);
   if (tty_owner == NULL)
     {
-      termios_printf ("can't open tty(%d) handle process %d",
+      termios_printf ("can't open tty (%d) handle process %d",
                      ttynum, get_ttyp ()->master_pid);
       __seterrno ();
       return 0;
@@ -529,7 +529,7 @@ fhandler_tty_slave::open (const char *, int flags, mode_t)
   ProtectHandle1 (nh, to_pty);
   CloseHandle (tty_owner);
 
-  termios_printf("tty%d opened", ttynum);
+  termios_printf ("tty%d opened", ttynum);
 
   return 1;
 }
@@ -555,7 +555,7 @@ fhandler_tty_slave::write (const void *ptr, size_t len)
 {
   DWORD n, towrite = len;
 
-  termios_printf("tty%d, write(%x, %d)", ttynum, ptr, len);
+  termios_printf ("tty%d, write(%x, %d)", ttynum, ptr, len);
 
   acquire_output_mutex (INFINITE);
 
@@ -597,7 +597,7 @@ fhandler_tty_slave::write (const void *ptr, size_t len)
          DWORD rc;
          DWORD x = n * 1000;
          rc = WaitForSingleObject (output_done_event, x);
-         termios_printf("waited %d ms for output_done_event, WFSO %d", x, rc);
+         termios_printf ("waited %d ms for output_done_event, WFSO %d", x, rc);
        }
     }
   release_output_mutex ();
@@ -627,9 +627,9 @@ fhandler_tty_slave::read (void *ptr, size_t len)
       if (vmin < 0) vmin = 0;
       if (vtime < 0) vtime = 0;
       if (vmin == 0)
-        time_to_wait = INFINITE;
+       time_to_wait = INFINITE;
       else
-        time_to_wait = (vtime == 0 ? INFINITE : 10 * vtime);
+       time_to_wait = (vtime == 0 ? INFINITE : 10 * vtime);
     }
   else
     time_to_wait = INFINITE;
@@ -641,58 +641,58 @@ fhandler_tty_slave::read (void *ptr, size_t len)
     {
       rc = WaitForMultipleObjects (2, w4, FALSE, time_to_wait);
       if (rc == WAIT_OBJECT_0)
-        {
-          /* if we've recieved signal after successfully reading some data,
-             just return all data successfully read */
-          if (totalread > 0)
-            break;
-          set_sig_errno (EINTR);
-          return -1;
-        }
+       {
+         /* if we've recieved signal after successfully reading some data,
+            just return all data successfully read */
+         if (totalread > 0)
+           break;
+         set_sig_errno (EINTR);
+         return -1;
+       }
       else if (rc == WAIT_FAILED)
-        {
-          termios_printf ("wait for input event failed, %E");
-          break;
-        }
+       {
+         termios_printf ("wait for input event failed, %E");
+         break;
+       }
       else if (rc == WAIT_TIMEOUT)
-        break;
+       break;
       rc = WaitForSingleObject (input_mutex, 1000);
       if (rc == WAIT_FAILED)
-        {
-          termios_printf ("wait for input mutex failed, %E");
-          break;
-        }
+       {
+         termios_printf ("wait for input mutex failed, %E");
+         break;
+       }
       else if (rc == WAIT_TIMEOUT)
-        {
-          termios_printf ("failed to acquire input mutex after input event arrived");
-          break;
-        }
+       {
+         termios_printf ("failed to acquire input mutex after input event arrived");
+         break;
+       }
       if (!PeekNamedPipe (get_handle (), NULL, 0, NULL, &bytes_in_pipe, NULL))
        {
          termios_printf ("PeekNamedPipe failed, %E");
-          _raise (SIGHUP);
-          bytes_in_pipe = 0;
+         _raise (SIGHUP);
+         bytes_in_pipe = 0;
        }
       readlen = min (bytes_in_pipe, min (len, sizeof (buf)));
-      if ( readlen )
-        {
-          termios_printf ("reading %d bytes (vtime %d)", readlen, vtime);
-          if (ReadFile (get_handle (), buf, readlen, &n, NULL) == FALSE)
-           {
+      if (readlen)
+       {
+         termios_printf ("reading %d bytes (vtime %d)", readlen, vtime);
+         if (ReadFile (get_handle (), buf, readlen, &n, NULL) == FALSE)
+           {
              termios_printf ("read failed, %E");
              _raise (SIGHUP);
            }
-          if (n)
-            {
-              len -= n;
-              totalread += n;
-              memcpy (ptr, buf, n);
-              ptr = (char *) ptr + n;
-            }
-        }
+         if (n)
+           {
+             len -= n;
+             totalread += n;
+             memcpy (ptr, buf, n);
+             ptr = (char *) ptr + n;
+           }
+       }
 
       if (readlen != bytes_in_pipe)
-        SetEvent (input_available_event);
+       SetEvent (input_available_event);
 
       ReleaseMutex (input_mutex);
 
@@ -707,18 +707,18 @@ fhandler_tty_slave::read (void *ptr, size_t len)
          termios_printf ("saw EOF");
          break;
        }
-      if ( get_ttyp ()->ti.c_lflag & ICANON ||
-           get_flags () & (O_NONBLOCK | O_NDELAY))
+      if (get_ttyp ()->ti.c_lflag & ICANON ||
+         get_flags () & (O_NONBLOCK | O_NDELAY))
        break;
       if (totalread >= vmin && (vmin > 0 || totalread > 0))
-        break;
+       break;
 
-      /* vmin == 0 && vtime == 0: 
+      /* vmin == 0 && vtime == 0:
        *   we've already read all input, if any, so return immediately
        * vmin == 0 && vtime > 0:
        *   we've waited for input 10*vtime ms in WFSO(input_available_event),
        *   no matter whether any input arrived, we shouldn't wait any longer,
-       *   so return immediately 
+       *   so return immediately
        * vmin > 0 && vtime == 0:
        *   here, totalread < vmin, so continue waiting until more data
        *   arrive
@@ -728,7 +728,8 @@ fhandler_tty_slave::read (void *ptr, size_t len)
        *   so "restart timer" and wait until more data arrive
        */
 
-      if (vmin == 0) break;
+      if (vmin == 0)
+       break;
     }
   termios_printf ("%d=read(%x, %d)", totalread, ptr, len);
   return totalread;
@@ -861,8 +862,8 @@ fhandler_tty_slave::ioctl (unsigned int cmd, void *arg)
         myself->ctty == ttynum && (get_ttyp ()->ti.c_lflag & TOSTOP))
     {
       /* background process */
-      termios_printf("bg ioctl pgid %d, tpgid %d, ctty %d",
-                    myself->pgid, get_ttyp ()->getpgid (), myself->ctty);
+      termios_printf ("bg ioctl pgid %d, tpgid %d, ctty %d",
+                     myself->pgid, get_ttyp ()->getpgid (), myself->ctty);
       _raise (SIGTTOU);
     }
 
@@ -1070,7 +1071,15 @@ fhandler_pty_master::ptsname (void)
 void
 fhandler_tty_common::set_close_on_exec (int val)
 {
+#ifndef DEBUGGING
   this->fhandler_base::set_close_on_exec (val);
+#else
+  /* FIXME: This is a duplication from fhandler_base::set_close_on_exec.
+     It is here because we need to specify the "from_pty" stuff here or
+     we'll get warnings from ForceCloseHandle when debugging. */
+  set_inheritance (get_io_handle (), val, "from_pty");
+  set_close_on_exec_flag (val);
+#endif
   if (output_done_event)
     set_inheritance (output_done_event, val);
   if (ioctl_request_event)
@@ -1082,7 +1091,7 @@ fhandler_tty_common::set_close_on_exec (int val)
   set_inheritance (output_mutex, val, "output_mutex");
   set_inheritance (input_mutex, val, "input_mutex");
   set_inheritance (input_available_event, val);
-  set_inheritance (output_handle, val);
+  set_inheritance (output_handle, val, "to_pty");
 }
 
 void
This page took 0.054933 seconds and 5 git commands to generate.