* 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 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
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);
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:
}
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;
}
/* 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)
{
fd = open (pathname, O_RDWR);
if (fd == -1)
- {
- set_errno (EBADF);
- }
+ set_errno (EBADF);
else
{
res = ftruncate (fd, length);
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;
}
{
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];
}
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],