* fcntl.cc (fcntl64): Add introductory debug statement. Call dup3 directory

via dtable method to avoid over-incrementing refcnt.
This commit is contained in:
Christopher Faylor 2012-02-01 17:38:07 +00:00
parent 8fa8b3a389
commit 29b7448d58
2 changed files with 12 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2012-02-01 Christopher Faylor <me.cygwin2012@cgf.cx>
* fcntl.cc (fcntl64): Add introductory debug statement. Call dup3
directory via dtable method to avoid over-incrementing refcnt.
2012-02-01 Christopher Faylor <me.cygwin2012@cgf.cx> 2012-02-01 Christopher Faylor <me.cygwin2012@cgf.cx>
* dtable.cc (dtable::dup_worker): Add comment explaining why refcnt * dtable.cc (dtable::dup_worker): Add comment explaining why refcnt

View File

@ -1,7 +1,7 @@
/* fcntl.cc: fcntl syscall /* fcntl.cc: fcntl syscall
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2008, Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2008,
2009, 2010, 2011 Red Hat, Inc. 2009, 2010, 2011, 2012 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -28,6 +28,7 @@ fcntl64 (int fd, int cmd, ...)
pthread_testcancel (); pthread_testcancel ();
debug_printf ("fcntl(%d, %d, ...)", fd, cmd);
myfault efault; myfault efault;
if (efault.faulted (EFAULT)) if (efault.faulted (EFAULT))
return -1; return -1;
@ -45,8 +46,10 @@ fcntl64 (int fd, int cmd, ...)
case F_DUPFD: case F_DUPFD:
case F_DUPFD_CLOEXEC: case F_DUPFD_CLOEXEC:
if ((int) arg >= 0 && (int) arg < OPEN_MAX_MAX) if ((int) arg >= 0 && (int) arg < OPEN_MAX_MAX)
res = dup3 (fd, cygheap_fdnew (((int) arg) - 1), {
cmd == F_DUPFD_CLOEXEC ? O_CLOEXEC : 0); int flags = cmd == F_DUPFD_CLOEXEC ? O_CLOEXEC : 0;
res = cygheap->fdtab.dup3 (fd, cygheap_fdnew (((int) arg) - 1), flags);
}
else else
{ {
set_errno (EINVAL); set_errno (EINVAL);
@ -107,3 +110,4 @@ _fcntl (int fd, int cmd, ...)
} }
return res; return res;
} }