]> sourceware.org Git - newlib-cygwin.git/commitdiff
Ensure that all fhandler_*::read definitions are __stdcall throughout.
authorChristopher Faylor <me@cgf.cx>
Wed, 24 Oct 2001 04:16:45 +0000 (04:16 +0000)
committerChristopher Faylor <me@cgf.cx>
Wed, 24 Oct 2001 04:16:45 +0000 (04:16 +0000)
* fhandler.cc (fhandler_base::set_inheritance): Be more defensive in debugging
code.
* fhandler.h: Adjust regparms throughout to reflect passing 'this' parameter.
* fhandler_console.cc (fhandler_console::read): Remove unneeded test.  Only
honor "key down" events.
* miscfuncs.cc (strcasestr): Reorganize for efficient code use.
(check_null_empty_str_errno): Ditto.
(__check_null_invalid_struct_errno): Ditto.
(__check_invalid_read_ptr_errno): Ditto.
* syscalls.cc (_read): Return 0 when length == 0, as per Single UNIX
Specification.

16 files changed:
winsup/cygwin/ChangeLog
winsup/cygwin/Makefile.in
winsup/cygwin/fhandler.cc
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_clipboard.cc
winsup/cygwin/fhandler_console.cc
winsup/cygwin/fhandler_dsp.cc
winsup/cygwin/fhandler_mem.cc
winsup/cygwin/fhandler_random.cc
winsup/cygwin/fhandler_socket.cc
winsup/cygwin/fhandler_tty.cc
winsup/cygwin/fhandler_windows.cc
winsup/cygwin/fhandler_zero.cc
winsup/cygwin/miscfuncs.cc
winsup/cygwin/pipe.cc
winsup/cygwin/syscalls.cc

index 9d6e25224e64d3c6df2cd8aa0b0eed6e7f00b360..47a7f6889e62d2b539c136001333679592ccfe09 100644 (file)
@@ -1,3 +1,19 @@
+2001-10-23  Christopher Faylor  <cgf@redhat.com>
+
+       Ensure that all fhandler_*::read definitions are __stdcall throughout.
+       * fhandler.cc (fhandler_base::set_inheritance): Be more defensive in
+       debugging code.
+       * fhandler.h: Adjust regparms throughout to reflect passing 'this'
+       parameter.
+       * fhandler_console.cc (fhandler_console::read): Remove unneeded test.
+       Only honor "key down" events.
+       * miscfuncs.cc (strcasestr): Reorganize for efficient code use.
+       (check_null_empty_str_errno): Ditto.
+       (__check_null_invalid_struct_errno): Ditto.
+       (__check_invalid_read_ptr_errno): Ditto.
+       * syscalls.cc (_read): Return 0 when length == 0, as per Single UNIX
+       Specification.
+
 2001-10-22  Christopher Faylor  <cgf@redhat.com>
 
        * debug.cc (set_errno): Return value of errno that was set, just like
index 10ac0e9b17798724aa49319a1c1e051323a84fec..8a62562e9d36e3ab585f5d92f5a3fb0bca068591 100644 (file)
@@ -50,7 +50,7 @@ DEFS = @DEFS@
 CC:=@CC@
 # FIXME: Which is it, CC or CC_FOR_TARGET?
 CC_FOR_TARGET:=$(CC)
-CFLAGS:=@CFLAGS@
+CFLAGS:=@CFLAGS@ -Winline
 CFLAGS+=-MD -fbuiltin
 CXX:=@CXX@
 CXXFLAGS:=@CXXFLAGS@
index cc205c087473445615c476efa9c2bd4b28edecb5..1385223f08b654422f21449f62a9d8bacbc8cc2b 100644 (file)
@@ -1611,7 +1611,9 @@ fhandler_dev_null::dump (void)
 void
 fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
 {
+#ifdef DEBUGGING
   HANDLE oh = h;
+#endif
   /* Note that we could use SetHandleInformation here but it is not available
      on all platforms.  Test cases seem to indicate that using DuplicateHandle
      in this fashion does not actually close the original handle, which is
@@ -1621,7 +1623,8 @@ fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
                             DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
     debug_printf ("DuplicateHandle failed, %E");
 #ifdef DEBUGGING
-  setclexec_pid (oh, h, not_inheriting);
+  if (h)
+    setclexec_pid (oh, h, not_inheriting);
 #endif
 }
 
index 1050df68b22a20882eb18029bd77f482426bdf9b..13a8dcd1c2eda38f670ae2803926ee396b22551e 100644 (file)
@@ -311,11 +311,11 @@ public:
 
   virtual int open (path_conv * real_path, int flags, mode_t mode = 0);
   virtual int close ();
-  virtual int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (2)));
+  virtual int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (3)));
   virtual int ioctl (unsigned int cmd, void *);
   virtual int fcntl (int cmd, void *);
   virtual char const * ttyname () { return get_name(); }
-  virtual int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  virtual int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   virtual int write (const void *ptr, size_t len);
   virtual off_t lseek (off_t offset, int whence);
   virtual int lock (int, struct flock *);
@@ -395,7 +395,7 @@ public:
   void set_shutdown_write () {FHSETF (SHUTWR);}
 
   int write (const void *ptr, size_t len);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   int ioctl (unsigned int cmd, void *);
   int fcntl (int cmd, void *);
   off_t lseek (off_t, int) { return 0; }
@@ -420,7 +420,7 @@ public:
   int check_peer_secret_event (struct sockaddr_in *peer, int *secret = NULL);
   void signal_secret_event ();
   void close_secret_event ();
-  int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (2)));
+  int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (3)));
 };
 
 class fhandler_pipe: public fhandler_base
@@ -437,7 +437,7 @@ public:
   select_record *select_except (select_record *s);
   int ready_for_read (int fd, DWORD howlong, int ignra);
   void set_close_on_exec (int val);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   int close ();
   void create_guard (SECURITY_ATTRIBUTES *sa) {guard = CreateMutex (sa, FALSE, NULL);}
   int dup (fhandler_base *child);
@@ -527,7 +527,7 @@ public:
 
   off_t lseek (off_t offset, int whence);
 
-  int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (2)));
+  int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (3)));
 
   int dup (fhandler_base *child);
 
@@ -557,8 +557,8 @@ public:
   int close ();
   int lock (int, struct flock *);
   BOOL is_device () { return FALSE; }
-  int __stdcall fstat (struct stat *buf, path_conv *pc) __attribute__ ((regparm (2)));
-  int __stdcall fstat_helper (struct stat *buf) __attribute__ ((regparm (1)));
+  int __stdcall fstat (struct stat *buf, path_conv *pc) __attribute__ ((regparm (3)));
+  int __stdcall fstat_helper (struct stat *buf) __attribute__ ((regparm (2)));
 
   HANDLE mmap (caddr_t *addr, size_t len, DWORD access, int flags, off_t off);
   int munmap (HANDLE h, caddr_t addr, size_t len);
@@ -748,7 +748,7 @@ public:
 
   int write (const void *ptr, size_t len);
   void doecho (const void *str, DWORD len) { (void) write (str, len); }
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   int close ();
 
   int tcflush (int);
@@ -819,7 +819,7 @@ public:
 
   int open (path_conv *, int flags, mode_t mode = 0);
   int write (const void *ptr, size_t len);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   void init (HANDLE, DWORD, mode_t);
 
   int tcsetattr (int a, const struct termios *t);
@@ -846,7 +846,7 @@ public:
   int accept_input ();
   int open (path_conv *, int flags, mode_t mode = 0);
   int write (const void *ptr, size_t len);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   int close ();
 
   int tcsetattr (int a, const struct termios *t);
@@ -892,7 +892,7 @@ public:
   fhandler_dev_zero ();
   int open (path_conv *, int flags, mode_t mode = 0);
   int write (const void *ptr, size_t len);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   off_t lseek (off_t offset, int whence);
   int close (void);
 
@@ -915,7 +915,7 @@ public:
   int get_unit () { return unit; }
   int open (path_conv *, int flags, mode_t mode = 0);
   int write (const void *ptr, size_t len);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   off_t lseek (off_t offset, int whence);
   int close (void);
   int dup (fhandler_base *child);
@@ -936,10 +936,10 @@ public:
 
   int open (path_conv *, int flags, mode_t mode = 0);
   int write (const void *ptr, size_t ulen);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   off_t lseek (off_t offset, int whence);
   int close (void);
-  int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (2)));
+  int __stdcall fstat (struct stat *buf, path_conv *) __attribute__ ((regparm (3)));
   int dup (fhandler_base *child);
 
   HANDLE mmap (caddr_t *addr, size_t len, DWORD access, int flags, off_t off);
@@ -958,7 +958,7 @@ public:
   int is_windows (void) { return 1; }
   int open (path_conv *, int flags, mode_t mode = 0);
   int write (const void *ptr, size_t len);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   off_t lseek (off_t offset, int whence);
   int close (void);
 
@@ -983,7 +983,7 @@ public:
   int is_windows (void) { return 1; }
   int open (path_conv *, int flags, mode_t mode = 0);
   int write (const void *ptr, size_t len);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   int ioctl (unsigned int cmd, void *);
   off_t lseek (off_t, int) { return 0; }
   int close (void) { return 0; }
@@ -1010,7 +1010,7 @@ public:
 
   int open (path_conv *, int flags, mode_t mode = 0);
   int write (const void *ptr, size_t len);
-  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (2)));
+  int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
   int ioctl (unsigned int cmd, void *);
   off_t lseek (off_t, int);
   int close (void);
index 19a3c7856bcaf6c0fa6f79f7407c405e285a38b3..69065865af323c72a86dc2496fbbb6be5f797a56 100644 (file)
@@ -184,7 +184,7 @@ fhandler_dev_clipboard::write (const void *buf, size_t len)
     }
 }
 
-int
+int __stdcall
 fhandler_dev_clipboard::read (void *ptr, size_t len)
 {
   HGLOBAL hglb;
index 417fcce1be7dc6be2fb8dd94e2439c3bfdb76e49..a9b7bffe8f5cd9ffabcd0bdb841365775d64b52e 100644 (file)
@@ -195,12 +195,9 @@ fhandler_console::set_cursor_maybe ()
     }
 }
 
-int
+int __stdcall
 fhandler_console::read (void *pv, size_t buflen)
 {
-  if (!buflen)
-    return 0;
-
   HANDLE h = get_io_handle ();
 
 #define buf ((char *) pv)
@@ -262,6 +259,9 @@ fhandler_console::read (void *pv, size_t buflen)
 #define virtual_key_code (input_rec.Event.KeyEvent.wVirtualKeyCode)
 #define control_key_state (input_rec.Event.KeyEvent.dwControlKeyState)
 
+         if (!input_rec.Event.KeyEvent.bKeyDown)
+           continue;
+
 #ifdef DEBUGGING
          /* allow manual switching to/from raw mode via ctrl-alt-scrolllock */
          if (input_rec.Event.KeyEvent.bKeyDown &&
@@ -310,7 +310,7 @@ fhandler_console::read (void *pv, size_t buflen)
              tmp[1] = ich;
              /* Need this check since US code page seems to have a bug when
                 converting a CTRL-U. */
-             if ((unsigned char)ich > 0x7f)
+             if ((unsigned char) ich > 0x7f)
                con_to_str (tmp + 1, tmp + 1, 1);
              /* Determine if the keystroke is modified by META.  The tricky
                 part is to distinguish whether the right Alt key should be
index 1dd4ff4e18cddba0891cb9390a9709e04801dc96..c55b7e26e75192f2335a073e835e465a8c4c28a7 100644 (file)
@@ -476,7 +476,7 @@ fhandler_dev_dsp::write (const void *ptr, size_t len)
   return len;
 }
 
-int
+int __stdcall
 fhandler_dev_dsp::read (void *ptr, size_t len)
 {
   return len;
index 84c48cc32a8abce29c28d70547087d47b7c0f125..14cdac0be08a1b810a91b8af2a44a10c6028ed1b 100644 (file)
@@ -177,7 +177,7 @@ fhandler_dev_mem::write (const void *ptr, size_t ulen)
   return ulen;
 }
 
-int
+int __stdcall
 fhandler_dev_mem::read (void *ptr, size_t ulen)
 {
   if (!ulen || pos >= mem_size)
index 679b2218df50278fa9fde95a597fba5f03c66501..8f43b600c7241a07858de4e620fa1b8e402f8ce5 100644 (file)
@@ -109,7 +109,7 @@ fhandler_dev_random::pseudo_read (void *ptr, size_t len)
   return len;
 }
 
-int
+int __stdcall
 fhandler_dev_random::read (void *ptr, size_t len)
 {
   if (!len)
index f7c28ff044ad2f80d83db0ab9b2d48e746809604..f53f7e95c96d3f6eda1d9323f248f01d647a0662 100644 (file)
@@ -247,7 +247,7 @@ fhandler_socket::fstat (struct stat *buf, path_conv *pc)
   return fh.fstat (buf, pc);
 }
 
-int
+int __stdcall
 fhandler_socket::read (void *ptr, size_t len)
 {
   sigframe thisframe (mainthread);
index 3a6a800a6e992d342d779a1d9507ffe2101d1b74..e69930034de7cd619c6b64a905a2149dd55e1810 100644 (file)
@@ -619,7 +619,7 @@ fhandler_tty_slave::write (const void *ptr, size_t len)
   return towrite;
 }
 
-int
+int __stdcall
 fhandler_tty_slave::read (void *ptr, size_t len)
 {
   DWORD n;
@@ -1032,7 +1032,7 @@ fhandler_pty_master::write (const void *ptr, size_t len)
   return len;
 }
 
-int
+int __stdcall
 fhandler_pty_master::read (void *ptr, size_t len)
 {
   return process_slave_output ((char *) ptr, len, pktmode);
index 8cf93e45c65b22d1b67a6ba18e939e0e34af2027..861ddefa1152dc2cdaae818e61bc2b9cff3052ed 100644 (file)
@@ -79,7 +79,7 @@ fhandler_windows::write (const void *buf, size_t)
     return SendMessage (ptr->hwnd, ptr->message, ptr->wParam, ptr->lParam);
 }
 
-int
+int __stdcall
 fhandler_windows::read (void *buf, size_t len)
 {
   MSG *ptr = (MSG *) buf;
index 8c1ba2d8f289d085bd1e031bb88e2b4b07333534..93b4544f35c82f9a89e8c20d6185f7f3090971ad 100644 (file)
@@ -34,7 +34,7 @@ fhandler_dev_zero::write (const void *, size_t len)
   return len;
 }
 
-int
+int __stdcall
 fhandler_dev_zero::read (void *ptr, size_t len)
 {
   memset(ptr, 0, len);
index ecc5bd203a19a22f81c3cc37b28cf9ac98958a60..4d72339cb54a4ee250046e66da0b87e39617ebf2 100644 (file)
@@ -118,13 +118,10 @@ strcasestr (const char *searchee, const char *lookfor)
 int __stdcall
 check_null_empty_str (const char *name)
 {
-  if (!name || IsBadStringPtr (name, MAX_PATH))
-    return EFAULT;
+  if (name && !IsBadStringPtr (name, MAX_PATH))
+    return !*name ? ENOENT : 0;
 
-  if (!*name)
-    return ENOENT;
-
-  return 0;
+  return EFAULT;
 }
 
 int __stdcall
@@ -139,26 +136,25 @@ check_null_empty_str_errno (const char *name)
 int __stdcall
 __check_null_invalid_struct (const void *s, unsigned sz)
 {
-  if (!s || IsBadWritePtr ((void *) s, sz))
-    return EFAULT;
+  if (s && !IsBadWritePtr ((void *) s, sz))
+    return 0;
 
-  return 0;
+  return EFAULT;
 }
 
 int __stdcall
 __check_null_invalid_struct_errno (const void *s, unsigned sz)
 {
-  int __err;
-  if ((__err = __check_null_invalid_struct (s, sz)))
-    set_errno (__err);
-  return __err;
+  int err;
+  if ((err = __check_null_invalid_struct (s, sz)))
+    set_errno (err);
+  return err;
 }
 
 int __stdcall
 __check_invalid_read_ptr_errno (const void *s, unsigned sz)
 {
-  if (!s || IsBadReadPtr ((void *) s, sz))
-    return set_errno (EFAULT);
-
-  return 0;
+  if (s && !IsBadReadPtr ((void *) s, sz))
+    return 0;
+  return set_errno (EFAULT);
 }
index a4039093c8b0f971542288513951c97af5ce8d17..5809b40f8cf98a4586eb5613c44d8f974ca596dc 100644 (file)
@@ -48,7 +48,7 @@ fhandler_pipe::set_close_on_exec (int val)
     set_inheritance (writepipe_exists, val);
 }
 
-int
+int __stdcall
 fhandler_pipe::read (void *in_ptr, size_t in_len)
 {
   int res = this->fhandler_base::read (in_ptr, in_len);
index 9d9eaeb895af688575be140beeb7c4d8dc76c46c..bfd5af8b69aaa47ffa60bacb50fc9fb6390e1d77 100644 (file)
@@ -287,6 +287,9 @@ setsid (void)
 extern "C" ssize_t
 _read (int fd, void *ptr, size_t len)
 {
+  if (len == 0)
+    return 0;
+
   if (__check_null_invalid_struct_errno (ptr, len))
     return -1;
 
This page took 0.056486 seconds and 5 git commands to generate.