* fhandler.cc (fhandler_base::fork_fixup): Don't protect handle.

* dlfcn.cc: Fix to confirm to coding standards.  Reorganize includes throughout
to accomodate new cygheap.h usage.
* cygheap.h (cygheap_fdmanip): New class: simplifies locking and retrieval of
fds from cygheap->fdtab.
(cygheap_fdget): Ditto.
(cygheap_fdnew): Ditto.
* fcntl.cc (_fcntl): Use new method to lock fdtab and retrieve info.
* ioctl.cc (ioctl): Ditto.
* mmap.cc (mmap): Ditto.
* net.cc: Ditto, throughout.
* passwd.cc (getpass): Ditto.
* path.cc (fchdir): Ditto.
* pipe.cc (make_pipe): Ditto.
* sec_acl.cc (facl): Ditto.
* syscalls.cc: Ditto, throughout.
* termios.cc: Ditto, throughout.
This commit is contained in:
Christopher Faylor
2001-10-15 23:39:33 +00:00
parent fff126983e
commit df63bd490a
24 changed files with 398 additions and 396 deletions

View File

@ -17,8 +17,8 @@ details. */
#include "fhandler.h"
#include "path.h"
#include "dtable.h"
#include "cygheap.h"
#include "cygerrno.h"
#include "cygheap.h"
#include "thread.h"
extern "C"
@ -29,22 +29,26 @@ _fcntl (int fd, int cmd,...)
va_list args;
int res;
if (cygheap->fdtab.not_open (fd))
cygheap_fdget cfd (fd, true);
if (cfd < 0)
{
set_errno (EBADF);
res = -1;
goto done;
}
SetResourceLock(LOCK_FD_LIST,WRITE_LOCK|READ_LOCK, "_fcntl");
va_start (args, cmd);
arg = va_arg (args, void *);
if (cmd == F_DUPFD)
res = dup2 (fd, cygheap->fdtab.find_unused_handle ((int) arg));
if (cmd != F_DUPFD)
res = cfd->fcntl(cmd, arg);
else
res = cygheap->fdtab[fd]->fcntl(cmd, arg);
{
cygheap_fdnew newfd;
if (newfd >= 0)
res = dup2 (fd, newfd);
else
res = -1;
}
va_end (args);
ReleaseResourceLock(LOCK_FD_LIST,WRITE_LOCK|READ_LOCK,"_fcntl");
done:
syscall_printf ("%d = fcntl (%d, %d, %p)", res, fd, cmd, arg);