diff options
author | Christopher Faylor <me@cgf.cx> | 2001-08-23 02:27:01 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2001-08-23 02:27:01 +0000 |
commit | ecaff08ccde6c4c4307dd4d6f54da7641221193c (patch) | |
tree | 4df556605676c2f5a2bbf04a9f860180558e1c52 /winsup | |
parent | cb19ccf4b5f516a404da2f90f5d12721d81c73e1 (diff) | |
download | newlib-ecaff08ccde6c4c4307dd4d6f54da7641221193c.zip newlib-ecaff08ccde6c4c4307dd4d6f54da7641221193c.tar.gz newlib-ecaff08ccde6c4c4307dd4d6f54da7641221193c.tar.bz2 |
* dtable.cc (dtable::dup2): Allow extension of fd table by dup2.
* syscalls.cc: Minor code cleanup.
(fpathconf): Check for bad fd before doing anything else.
* termios.cc (tcsetattr): Don't convert to new termios if bad fd.
(tcgetattr): Minor debugging tweak.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 8 | ||||
-rw-r--r-- | winsup/cygwin/dtable.cc | 2 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 37 | ||||
-rw-r--r-- | winsup/cygwin/termios.cc | 5 |
4 files changed, 28 insertions, 24 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index fb69b18..cb19cbb 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +Wed Aug 22 22:23:14 2001 Christopher Faylor <cgf@cygnus.com> + + * dtable.cc (dtable::dup2): Allow extension of fd table by dup2. + * syscalls.cc: Minor code cleanup. + (fpathconf): Check for bad fd before doing anything else. + * termios.cc (tcsetattr): Don't convert to new termios if bad fd. + (tcgetattr): Minor debugging tweak. + Wed Aug 22 23:41:00 2001 Corinna Vinschen <corinna@vinschen.de> * net.cc (cygwin_inet_ntoa): Rearrange previous patch to use diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 4583a3f..bde0f37 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -386,7 +386,7 @@ dtable::dup2 (int oldfd, int newfd) SetResourceLock(LOCK_FD_LIST,WRITE_LOCK|READ_LOCK,"dup"); - if ((size_t) newfd >= cygheap->fdtab.size || newfd < 0) + if (newfd < 0) { syscall_printf ("new fd out of bounds: %d", newfd); set_errno (EBADF); diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 936fd59..4708cb0 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1494,6 +1494,11 @@ check_posix_perm (const char *fname, int v) extern "C" long int fpathconf (int fd, int v) { + if (cygheap->fdtab.not_open (fd)) + { + set_errno (EBADF); + return -1; + } switch (v) { case _PC_LINK_MAX: @@ -1525,16 +1530,13 @@ fpathconf (int fd, int v) } case _PC_POSIX_PERMISSIONS: case _PC_POSIX_SECURITY: - if (cygheap->fdtab.not_open (fd)) - set_errno (EBADF); - else - { - fhandler_base *fh = cygheap->fdtab[fd]; - if (fh->get_device () == FH_DISK) - return check_posix_perm (fh->get_win32_name (), v); - set_errno (EINVAL); - } - return -1; + { + fhandler_base *fh = cygheap->fdtab[fd]; + if (fh->get_device () == FH_DISK) + return check_posix_perm (fh->get_win32_name (), v); + set_errno (EINVAL); + return -1; + } default: set_errno (EINVAL); return -1; @@ -1772,7 +1774,6 @@ ftruncate (int fd, off_t length) } /* truncate: Provided by SVR4 and 4.3+BSD. Not part of POSIX.1 or XPG3 */ -/* FIXME: untested */ extern "C" int truncate (const char *pathname, off_t length) { @@ -1783,9 +1784,7 @@ truncate (const char *pathname, off_t length) fd = open (pathname, O_RDWR); if (fd == -1) - { - set_errno (EBADF); - } + set_errno (EBADF); else { res = ftruncate (fd, length); @@ -1802,15 +1801,11 @@ get_osfhandle (int fd) long res = -1; if (cygheap->fdtab.not_open (fd)) - { - set_errno (EBADF); - } + set_errno (EBADF); else - { - res = (long) cygheap->fdtab[fd]->get_handle (); - } - syscall_printf ("%d = get_osfhandle (%d)", res, fd); + res = (long) cygheap->fdtab[fd]->get_handle (); + syscall_printf ("%d = get_osfhandle (%d)", res, fd); return res; } diff --git a/winsup/cygwin/termios.cc b/winsup/cygwin/termios.cc index defea6a..a2674aa 100644 --- a/winsup/cygwin/termios.cc +++ b/winsup/cygwin/termios.cc @@ -143,13 +143,14 @@ tcsetattr (int fd, int a, const struct termios *t) { int res = -1; - t = __tonew_termios (t); if (cygheap->fdtab.not_open (fd)) { set_errno (EBADF); goto out; } + t = __tonew_termios (t); + fhandler_base *fh; fh = cygheap->fdtab[fd]; @@ -187,7 +188,7 @@ tcgetattr (int fd, struct termios *in_t) } if (res) - termios_printf ("%d = tcgetattr (%d, %x)", res, fd, in_t); + termios_printf ("%d = tcgetattr (%d, %p)", res, fd, in_t); else termios_printf ("iflag %x, oflag %x, cflag %x, lflag %x, VMIN %d, VTIME %d", t->c_iflag, t->c_oflag, t->c_cflag, t->c_lflag, t->c_cc[VMIN], |