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.
This commit is contained in:
parent
0280c8c0f3
commit
a0626ebe27
@ -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>
|
2001-10-22 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
* debug.cc (set_errno): Return value of errno that was set, just like
|
* debug.cc (set_errno): Return value of errno that was set, just like
|
||||||
|
@ -50,7 +50,7 @@ DEFS = @DEFS@
|
|||||||
CC:=@CC@
|
CC:=@CC@
|
||||||
# FIXME: Which is it, CC or CC_FOR_TARGET?
|
# FIXME: Which is it, CC or CC_FOR_TARGET?
|
||||||
CC_FOR_TARGET:=$(CC)
|
CC_FOR_TARGET:=$(CC)
|
||||||
CFLAGS:=@CFLAGS@
|
CFLAGS:=@CFLAGS@ -Winline
|
||||||
CFLAGS+=-MD -fbuiltin
|
CFLAGS+=-MD -fbuiltin
|
||||||
CXX:=@CXX@
|
CXX:=@CXX@
|
||||||
CXXFLAGS:=@CXXFLAGS@
|
CXXFLAGS:=@CXXFLAGS@
|
||||||
|
@ -1611,7 +1611,9 @@ fhandler_dev_null::dump (void)
|
|||||||
void
|
void
|
||||||
fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
|
fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUGGING
|
||||||
HANDLE oh = h;
|
HANDLE oh = h;
|
||||||
|
#endif
|
||||||
/* Note that we could use SetHandleInformation here but it is not available
|
/* Note that we could use SetHandleInformation here but it is not available
|
||||||
on all platforms. Test cases seem to indicate that using DuplicateHandle
|
on all platforms. Test cases seem to indicate that using DuplicateHandle
|
||||||
in this fashion does not actually close the original handle, which is
|
in this fashion does not actually close the original handle, which is
|
||||||
@ -1621,6 +1623,7 @@ fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
|
|||||||
DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
|
DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
|
||||||
debug_printf ("DuplicateHandle failed, %E");
|
debug_printf ("DuplicateHandle failed, %E");
|
||||||
#ifdef DEBUGGING
|
#ifdef DEBUGGING
|
||||||
|
if (h)
|
||||||
setclexec_pid (oh, h, not_inheriting);
|
setclexec_pid (oh, h, not_inheriting);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -311,11 +311,11 @@ public:
|
|||||||
|
|
||||||
virtual int open (path_conv * real_path, int flags, mode_t mode = 0);
|
virtual int open (path_conv * real_path, int flags, mode_t mode = 0);
|
||||||
virtual int close ();
|
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 ioctl (unsigned int cmd, void *);
|
||||||
virtual int fcntl (int cmd, void *);
|
virtual int fcntl (int cmd, void *);
|
||||||
virtual char const * ttyname () { return get_name(); }
|
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 int write (const void *ptr, size_t len);
|
||||||
virtual off_t lseek (off_t offset, int whence);
|
virtual off_t lseek (off_t offset, int whence);
|
||||||
virtual int lock (int, struct flock *);
|
virtual int lock (int, struct flock *);
|
||||||
@ -395,7 +395,7 @@ public:
|
|||||||
void set_shutdown_write () {FHSETF (SHUTWR);}
|
void set_shutdown_write () {FHSETF (SHUTWR);}
|
||||||
|
|
||||||
int write (const void *ptr, size_t len);
|
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 ioctl (unsigned int cmd, void *);
|
||||||
int fcntl (int cmd, void *);
|
int fcntl (int cmd, void *);
|
||||||
off_t lseek (off_t, int) { return 0; }
|
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);
|
int check_peer_secret_event (struct sockaddr_in *peer, int *secret = NULL);
|
||||||
void signal_secret_event ();
|
void signal_secret_event ();
|
||||||
void close_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
|
class fhandler_pipe: public fhandler_base
|
||||||
@ -437,7 +437,7 @@ public:
|
|||||||
select_record *select_except (select_record *s);
|
select_record *select_except (select_record *s);
|
||||||
int ready_for_read (int fd, DWORD howlong, int ignra);
|
int ready_for_read (int fd, DWORD howlong, int ignra);
|
||||||
void set_close_on_exec (int val);
|
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 ();
|
int close ();
|
||||||
void create_guard (SECURITY_ATTRIBUTES *sa) {guard = CreateMutex (sa, FALSE, NULL);}
|
void create_guard (SECURITY_ATTRIBUTES *sa) {guard = CreateMutex (sa, FALSE, NULL);}
|
||||||
int dup (fhandler_base *child);
|
int dup (fhandler_base *child);
|
||||||
@ -527,7 +527,7 @@ public:
|
|||||||
|
|
||||||
off_t lseek (off_t offset, int whence);
|
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);
|
int dup (fhandler_base *child);
|
||||||
|
|
||||||
@ -557,8 +557,8 @@ public:
|
|||||||
int close ();
|
int close ();
|
||||||
int lock (int, struct flock *);
|
int lock (int, struct flock *);
|
||||||
BOOL is_device () { return FALSE; }
|
BOOL is_device () { return FALSE; }
|
||||||
int __stdcall fstat (struct stat *buf, path_conv *pc) __attribute__ ((regparm (2)));
|
int __stdcall fstat (struct stat *buf, path_conv *pc) __attribute__ ((regparm (3)));
|
||||||
int __stdcall fstat_helper (struct stat *buf) __attribute__ ((regparm (1)));
|
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);
|
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);
|
int munmap (HANDLE h, caddr_t addr, size_t len);
|
||||||
@ -748,7 +748,7 @@ public:
|
|||||||
|
|
||||||
int write (const void *ptr, size_t len);
|
int write (const void *ptr, size_t len);
|
||||||
void doecho (const void *str, DWORD len) { (void) write (str, 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 close ();
|
||||||
|
|
||||||
int tcflush (int);
|
int tcflush (int);
|
||||||
@ -819,7 +819,7 @@ public:
|
|||||||
|
|
||||||
int open (path_conv *, int flags, mode_t mode = 0);
|
int open (path_conv *, int flags, mode_t mode = 0);
|
||||||
int write (const void *ptr, size_t len);
|
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);
|
void init (HANDLE, DWORD, mode_t);
|
||||||
|
|
||||||
int tcsetattr (int a, const struct termios *t);
|
int tcsetattr (int a, const struct termios *t);
|
||||||
@ -846,7 +846,7 @@ public:
|
|||||||
int accept_input ();
|
int accept_input ();
|
||||||
int open (path_conv *, int flags, mode_t mode = 0);
|
int open (path_conv *, int flags, mode_t mode = 0);
|
||||||
int write (const void *ptr, size_t len);
|
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 close ();
|
||||||
|
|
||||||
int tcsetattr (int a, const struct termios *t);
|
int tcsetattr (int a, const struct termios *t);
|
||||||
@ -892,7 +892,7 @@ public:
|
|||||||
fhandler_dev_zero ();
|
fhandler_dev_zero ();
|
||||||
int open (path_conv *, int flags, mode_t mode = 0);
|
int open (path_conv *, int flags, mode_t mode = 0);
|
||||||
int write (const void *ptr, size_t len);
|
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);
|
off_t lseek (off_t offset, int whence);
|
||||||
int close (void);
|
int close (void);
|
||||||
|
|
||||||
@ -915,7 +915,7 @@ public:
|
|||||||
int get_unit () { return unit; }
|
int get_unit () { return unit; }
|
||||||
int open (path_conv *, int flags, mode_t mode = 0);
|
int open (path_conv *, int flags, mode_t mode = 0);
|
||||||
int write (const void *ptr, size_t len);
|
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);
|
off_t lseek (off_t offset, int whence);
|
||||||
int close (void);
|
int close (void);
|
||||||
int dup (fhandler_base *child);
|
int dup (fhandler_base *child);
|
||||||
@ -936,10 +936,10 @@ public:
|
|||||||
|
|
||||||
int open (path_conv *, int flags, mode_t mode = 0);
|
int open (path_conv *, int flags, mode_t mode = 0);
|
||||||
int write (const void *ptr, size_t ulen);
|
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);
|
off_t lseek (off_t offset, int whence);
|
||||||
int close (void);
|
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);
|
int dup (fhandler_base *child);
|
||||||
|
|
||||||
HANDLE mmap (caddr_t *addr, size_t len, DWORD access, int flags, off_t off);
|
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 is_windows (void) { return 1; }
|
||||||
int open (path_conv *, int flags, mode_t mode = 0);
|
int open (path_conv *, int flags, mode_t mode = 0);
|
||||||
int write (const void *ptr, size_t len);
|
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);
|
off_t lseek (off_t offset, int whence);
|
||||||
int close (void);
|
int close (void);
|
||||||
|
|
||||||
@ -983,7 +983,7 @@ public:
|
|||||||
int is_windows (void) { return 1; }
|
int is_windows (void) { return 1; }
|
||||||
int open (path_conv *, int flags, mode_t mode = 0);
|
int open (path_conv *, int flags, mode_t mode = 0);
|
||||||
int write (const void *ptr, size_t len);
|
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 ioctl (unsigned int cmd, void *);
|
||||||
off_t lseek (off_t, int) { return 0; }
|
off_t lseek (off_t, int) { return 0; }
|
||||||
int close (void) { return 0; }
|
int close (void) { return 0; }
|
||||||
@ -1010,7 +1010,7 @@ public:
|
|||||||
|
|
||||||
int open (path_conv *, int flags, mode_t mode = 0);
|
int open (path_conv *, int flags, mode_t mode = 0);
|
||||||
int write (const void *ptr, size_t len);
|
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 ioctl (unsigned int cmd, void *);
|
||||||
off_t lseek (off_t, int);
|
off_t lseek (off_t, int);
|
||||||
int close (void);
|
int close (void);
|
||||||
|
@ -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)
|
fhandler_dev_clipboard::read (void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
HGLOBAL hglb;
|
HGLOBAL hglb;
|
||||||
|
@ -195,12 +195,9 @@ fhandler_console::set_cursor_maybe ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_console::read (void *pv, size_t buflen)
|
fhandler_console::read (void *pv, size_t buflen)
|
||||||
{
|
{
|
||||||
if (!buflen)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
HANDLE h = get_io_handle ();
|
HANDLE h = get_io_handle ();
|
||||||
|
|
||||||
#define buf ((char *) pv)
|
#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 virtual_key_code (input_rec.Event.KeyEvent.wVirtualKeyCode)
|
||||||
#define control_key_state (input_rec.Event.KeyEvent.dwControlKeyState)
|
#define control_key_state (input_rec.Event.KeyEvent.dwControlKeyState)
|
||||||
|
|
||||||
|
if (!input_rec.Event.KeyEvent.bKeyDown)
|
||||||
|
continue;
|
||||||
|
|
||||||
#ifdef DEBUGGING
|
#ifdef DEBUGGING
|
||||||
/* allow manual switching to/from raw mode via ctrl-alt-scrolllock */
|
/* allow manual switching to/from raw mode via ctrl-alt-scrolllock */
|
||||||
if (input_rec.Event.KeyEvent.bKeyDown &&
|
if (input_rec.Event.KeyEvent.bKeyDown &&
|
||||||
|
@ -476,7 +476,7 @@ fhandler_dev_dsp::write (const void *ptr, size_t len)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_dev_dsp::read (void *ptr, size_t len)
|
fhandler_dev_dsp::read (void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
return len;
|
return len;
|
||||||
|
@ -177,7 +177,7 @@ fhandler_dev_mem::write (const void *ptr, size_t ulen)
|
|||||||
return ulen;
|
return ulen;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_dev_mem::read (void *ptr, size_t ulen)
|
fhandler_dev_mem::read (void *ptr, size_t ulen)
|
||||||
{
|
{
|
||||||
if (!ulen || pos >= mem_size)
|
if (!ulen || pos >= mem_size)
|
||||||
|
@ -109,7 +109,7 @@ fhandler_dev_random::pseudo_read (void *ptr, size_t len)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_dev_random::read (void *ptr, size_t len)
|
fhandler_dev_random::read (void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
if (!len)
|
if (!len)
|
||||||
|
@ -247,7 +247,7 @@ fhandler_socket::fstat (struct stat *buf, path_conv *pc)
|
|||||||
return fh.fstat (buf, pc);
|
return fh.fstat (buf, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_socket::read (void *ptr, size_t len)
|
fhandler_socket::read (void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
sigframe thisframe (mainthread);
|
sigframe thisframe (mainthread);
|
||||||
|
@ -619,7 +619,7 @@ fhandler_tty_slave::write (const void *ptr, size_t len)
|
|||||||
return towrite;
|
return towrite;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_tty_slave::read (void *ptr, size_t len)
|
fhandler_tty_slave::read (void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
DWORD n;
|
DWORD n;
|
||||||
@ -1032,7 +1032,7 @@ fhandler_pty_master::write (const void *ptr, size_t len)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_pty_master::read (void *ptr, size_t len)
|
fhandler_pty_master::read (void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
return process_slave_output ((char *) ptr, len, pktmode);
|
return process_slave_output ((char *) ptr, len, pktmode);
|
||||||
|
@ -79,7 +79,7 @@ fhandler_windows::write (const void *buf, size_t)
|
|||||||
return SendMessage (ptr->hwnd, ptr->message, ptr->wParam, ptr->lParam);
|
return SendMessage (ptr->hwnd, ptr->message, ptr->wParam, ptr->lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_windows::read (void *buf, size_t len)
|
fhandler_windows::read (void *buf, size_t len)
|
||||||
{
|
{
|
||||||
MSG *ptr = (MSG *) buf;
|
MSG *ptr = (MSG *) buf;
|
||||||
|
@ -34,7 +34,7 @@ fhandler_dev_zero::write (const void *, size_t len)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_dev_zero::read (void *ptr, size_t len)
|
fhandler_dev_zero::read (void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
memset(ptr, 0, len);
|
memset(ptr, 0, len);
|
||||||
|
@ -118,13 +118,10 @@ strcasestr (const char *searchee, const char *lookfor)
|
|||||||
int __stdcall
|
int __stdcall
|
||||||
check_null_empty_str (const char *name)
|
check_null_empty_str (const char *name)
|
||||||
{
|
{
|
||||||
if (!name || IsBadStringPtr (name, MAX_PATH))
|
if (name && !IsBadStringPtr (name, MAX_PATH))
|
||||||
|
return !*name ? ENOENT : 0;
|
||||||
|
|
||||||
return EFAULT;
|
return EFAULT;
|
||||||
|
|
||||||
if (!*name)
|
|
||||||
return ENOENT;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int __stdcall
|
int __stdcall
|
||||||
@ -139,26 +136,25 @@ check_null_empty_str_errno (const char *name)
|
|||||||
int __stdcall
|
int __stdcall
|
||||||
__check_null_invalid_struct (const void *s, unsigned sz)
|
__check_null_invalid_struct (const void *s, unsigned sz)
|
||||||
{
|
{
|
||||||
if (!s || IsBadWritePtr ((void *) s, sz))
|
if (s && !IsBadWritePtr ((void *) s, sz))
|
||||||
return EFAULT;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
return EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
int __stdcall
|
int __stdcall
|
||||||
__check_null_invalid_struct_errno (const void *s, unsigned sz)
|
__check_null_invalid_struct_errno (const void *s, unsigned sz)
|
||||||
{
|
{
|
||||||
int __err;
|
int err;
|
||||||
if ((__err = __check_null_invalid_struct (s, sz)))
|
if ((err = __check_null_invalid_struct (s, sz)))
|
||||||
set_errno (__err);
|
set_errno (err);
|
||||||
return __err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int __stdcall
|
int __stdcall
|
||||||
__check_invalid_read_ptr_errno (const void *s, unsigned sz)
|
__check_invalid_read_ptr_errno (const void *s, unsigned sz)
|
||||||
{
|
{
|
||||||
if (!s || IsBadReadPtr ((void *) s, sz))
|
if (s && !IsBadReadPtr ((void *) s, sz))
|
||||||
return set_errno (EFAULT);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
return set_errno (EFAULT);
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ fhandler_pipe::set_close_on_exec (int val)
|
|||||||
set_inheritance (writepipe_exists, val);
|
set_inheritance (writepipe_exists, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int __stdcall
|
||||||
fhandler_pipe::read (void *in_ptr, size_t in_len)
|
fhandler_pipe::read (void *in_ptr, size_t in_len)
|
||||||
{
|
{
|
||||||
int res = this->fhandler_base::read (in_ptr, in_len);
|
int res = this->fhandler_base::read (in_ptr, in_len);
|
||||||
|
@ -287,6 +287,9 @@ setsid (void)
|
|||||||
extern "C" ssize_t
|
extern "C" ssize_t
|
||||||
_read (int fd, void *ptr, size_t len)
|
_read (int fd, void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
|
if (len == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (__check_null_invalid_struct_errno (ptr, len))
|
if (__check_null_invalid_struct_errno (ptr, len))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user