glibc/hurd/dtable.c
Ulrich Drepper ebbad4cc83 Update.
1997-05-26 22:51  Ulrich Drepper  <drepper@cygnus.com>

	* configure.in: Use AC_PROG_CC_LOCAL instead of AC_PROC_CC.
	* aclocal.m4: Add AC_PROG_CC_LOCAL which does not fail for
	environments in which linking is not possible at configure time
	(since te libc is just build).
	Based on patches by Marcus G. Daniels <marcus@cathcart.sysc.pdx.edu>.

	* time/scheck.c (scheck): Make 2nd parameter const.
	* time/private.h: Likewise.

1997-05-26 18:58  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/random_r.c (__initstate_r): Initialize randomizer type in
	state array only at right place.
	Reported by Sven Verdoolaege <skimo@breughel.ufsia.ac.be>.

	* stdlib/erand48_r.c (__erand48_r): Don't generate numbers in
	[0.5,1.0) but really in [0.0, 1.0).
	Patch by Oliver Gathmann <gathmann@scar.utoronto.ca>.

1997-05-22 12:50  Eric Delaunay  <delaunay@lix.polytechnique.fr>

	* shlib-versions: Provide Linux/SPARC defaults.

1997-05-26 15:00  Matthias Urlichs  <urlichs@noris.de>

	* stdlib/strtod_l.c: Add missing #include <xlocale.h>.
	* stdlib/strtof_l.c: Likewise.
	* stdlib/strtol_l.c: Likewise.
	* stdlib/strtold_l.c: Likewise.
	* stdlib/strtoll_l.c: Likewise.
	* stdlib/strtoul_l.c: Likewise.
	* stdlib/strtoull_l.c: Likewise.

1997-05-26 02:42  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* hurd/dtable.c: De-ansidecl-fy.
	* math/test-math.c: Likewise.
	* signal/tst-signal.c: Likewise.
	* stdio/getc.c: Likewise.
	* stdio/obstream.c: Likewise.
	* stdio/putc.c: Likewise.
	* stdio-common/bug1.c: Likewise.
	* stdio-common/bug2.c: Likewise.
	* stdio-common/bug6.c: Likewise.
	* stdio-common/fscanf.c: Likewise.
	* stdlib/testsort.c: Likewise.
	* string/tester.c: Likewise.
	* sysdeps/am29k/ffs.c: Likewise.
	* sysdeps/generic/bb_init_func.c: Likewise.
	* sysdeps/generic/bcopy.c: Likewise.
	* sysdeps/generic/bzero.c: Likewise.
	* sysdeps/generic/div.c: Likewise.
	* sysdeps/generic/ffs.c: Likewise.
	* sysdeps/generic/memccpy.c: Likewise.
	* sysdeps/generic/memcpy.c: Likewise.
	* sysdeps/generic/memmove.c: Likewise.
	* sysdeps/generic/memset.c: Likewise.
	* sysdeps/generic/vfork.c: Likewise.
	* sysdeps/generic/vtimes.c: Likewise.
	* sysdeps/i386/bzero.c: Likewise.
	* sysdeps/i386/ffs.c: Likewise.
	* sysdeps/i960/ffs.c: Likewise.
	* sysdeps/m68k/ffs.c: Likewise.
	* sysdeps/m88k/ffs.c: Likewise.
	* sysdeps/mach/hurd/_exit.c: Likewise.
	* sysdeps/mach/hurd/accept.c: Likewise.
	* sysdeps/mach/hurd/access.c: Likewise.
	* sysdeps/mach/hurd/adjtime.c: Likewise.
	* sysdeps/mach/hurd/bind.c: Likewise.
	* sysdeps/mach/hurd/brk.c: Likewise.
	* sysdeps/mach/hurd/chdir.c: Likewise.
	* sysdeps/mach/hurd/chflags.c: Likewise.
	* sysdeps/mach/hurd/chmod.c: Likewise.
	* sysdeps/mach/hurd/chown.c: Likewise.
	* sysdeps/mach/hurd/chroot.c: Likewise.
	* sysdeps/mach/hurd/close.c: Likewise.
	* sysdeps/mach/hurd/connect.c: Likewise.
	* sysdeps/mach/hurd/defs.c: Likewise.
	* sysdeps/mach/hurd/dup2.c: Likewise.
	* sysdeps/mach/hurd/execve.c: Likewise.
	* sysdeps/mach/hurd/fchdir.c: Likewise.
	* sysdeps/mach/hurd/fchflags.c: Likewise.
	* sysdeps/mach/hurd/fchmod.c: Likewise.
	* sysdeps/mach/hurd/fchown.c: Likewise.
	* sysdeps/mach/hurd/fcntl.c: Likewise.
	* sysdeps/mach/hurd/fdopen.c: Likewise.
	* sysdeps/mach/hurd/flock.c: Likewise.
	* sysdeps/mach/hurd/fsync.c: Likewise.
	* sysdeps/mach/hurd/ftruncate.c: Likewise.
	* sysdeps/mach/hurd/getdtsz.c: Likewise.
	* sysdeps/mach/hurd/getegid.c: Likewise.
	* sysdeps/mach/hurd/geteuid.c: Likewise.
	* sysdeps/mach/hurd/getgid.c: Likewise.
	* sysdeps/mach/hurd/getgroups.c: Likewise.
	* sysdeps/mach/hurd/gethostid.c: Likewise.
	* sysdeps/mach/hurd/gethostname.c: Likewise.
	* sysdeps/mach/hurd/getitimer.c: Likewise.
	* sysdeps/mach/hurd/getlogin.c: Likewise.
	* sysdeps/mach/hurd/getpeername.c: Likewise.
	* sysdeps/mach/hurd/getpgid.c: Likewise.
	* sysdeps/mach/hurd/getpid.c: Likewise.
	* sysdeps/mach/hurd/getppid.c: Likewise.
	* sysdeps/mach/hurd/getsockname.c: Likewise.
	* sysdeps/mach/hurd/getsockopt.c: Likewise.
	* sysdeps/mach/hurd/getuid.c: Likewise.
	* sysdeps/mach/hurd/ioctl.c: Likewise.
	* sysdeps/mach/hurd/isatty.c: Likewise.
	* sysdeps/mach/hurd/link.c: Likewise.
	* sysdeps/mach/hurd/listen.c: Likewise.
	* sysdeps/mach/hurd/lseek.c: Likewise.
	* sysdeps/mach/hurd/mkdir.c: Likewise.
	* sysdeps/mach/hurd/open.c: Likewise.
	* sysdeps/mach/hurd/pipe.c: Likewise.
	* sysdeps/mach/hurd/read.c: Likewise.
	* sysdeps/mach/hurd/readlink.c: Likewise.
	* sysdeps/mach/hurd/reboot.c: Likewise.
	* sysdeps/mach/hurd/recv.c: Likewise.
	* sysdeps/mach/hurd/recvfrom.c: Likewise.
	* sysdeps/mach/hurd/rename.c: Likewise.
	* sysdeps/mach/hurd/rewinddir.c: Likewise.
	* sysdeps/mach/hurd/rmdir.c: Likewise.
	* sysdeps/mach/hurd/sbrk.c: Likewise.
	* sysdeps/mach/hurd/seekdir.c: Likewise.
	* sysdeps/mach/hurd/select.c: Likewise.
	* sysdeps/mach/hurd/setegid.c: Likewise.
	* sysdeps/mach/hurd/seteuid.c: Likewise.
	* sysdeps/mach/hurd/setgid.c: Likewise.
	* sysdeps/mach/hurd/setgroups.c: Likewise.
	* sysdeps/mach/hurd/sethostid.c: Likewise.
	* sysdeps/mach/hurd/sethostname.c: Likewise.
	* sysdeps/mach/hurd/setlogin.c: Likewise.
	* sysdeps/mach/hurd/setpgid.c: Likewise.
	* sysdeps/mach/hurd/setregid.c: Likewise.
	* sysdeps/mach/hurd/setreuid.c: Likewise.
	* sysdeps/mach/hurd/setrlimit.c: Likewise.
	* sysdeps/mach/hurd/setsid.c: Likewise.
	* sysdeps/mach/hurd/setsockopt.c: Likewise.
	* sysdeps/mach/hurd/settimeofday.c: Likewise.
	* sysdeps/mach/hurd/setuid.c: Likewise.
	* sysdeps/mach/hurd/shutdown.c: Likewise.
	* sysdeps/mach/hurd/sigaction.c: Likewise.
	* sysdeps/mach/hurd/sigaltstack.c: Likewise.
	* sysdeps/mach/hurd/sigpending.c: Likewise.
	* sysdeps/mach/hurd/sigprocmask.c: Likewise.
	* sysdeps/mach/hurd/sigstack.c: Likewise.
	* sysdeps/mach/hurd/sigsuspend.c: Likewise.
	* sysdeps/mach/hurd/socket.c: Likewise.
	* sysdeps/mach/hurd/socketpair.c: Likewise.
	* sysdeps/mach/hurd/stdio_init.c: Likewise.
	* sysdeps/mach/hurd/symlink.c: Likewise.
	* sysdeps/mach/hurd/sync.c: Likewise.
	* sysdeps/mach/hurd/sysd-stdio.c: Likewise.
	* sysdeps/mach/hurd/telldir.c: Likewise.
	* sysdeps/mach/hurd/truncate.c: Likewise.
	* sysdeps/mach/hurd/umask.c: Likewise.
	* sysdeps/mach/hurd/unlink.c: Likewise.
	* sysdeps/mach/hurd/wait4.c: Likewise.
	* sysdeps/mach/hurd/utimes.c: Likewise.
	* sysdeps/mach/hurd/write.c: Likewise.
	* sysdeps/mach/adjtime.c: Likewise.
	* sysdeps/mach/gettimeofday.c: Likewise.
	* sysdeps/mach/usleep.c: Likewise.
	* sysdeps/mips/__longjmp.c: Likewise.
	* sysdeps/posix/clock.c: Likewise.
	* sysdeps/posix/ctermid.c: Likewise.
	* sysdeps/posix/defs.c: Likewise.
	* sysdeps/posix/dup.c: Likewise.
	* sysdeps/posix/libc_fatal.c: Likewise.
	* sysdeps/posix/stdio_init.c: Likewise.
	* sysdeps/rs6000/ffs.c: Likewise.
	* sysdeps/sparc/e_sqrt.c: Likewise.
	* sysdeps/standalone/i386/force_cpu386/_exit.c: Likewise.
	* sysdeps/standalone/i386/force_cpu386/brdinit.c: Likewise.
	* sysdeps/standalone/i386/force_cpu386/console.c: Likewise.
	* sysdeps/standalone/i960/nindy960/_exit.c: Likewise.
	* sysdeps/standalone/i960/nindy960/brdinit.c: Likewise.
	* sysdeps/standalone/i960/nindy960/console.c: Likewise.
	* sysdeps/standalone/m68k/m68020/mvme136/_exit.c: Likewise.
	* sysdeps/standalone/m68k/m68020/mvme136/brdinit.c: Likewise.
	* sysdeps/standalone/brk.c: Likewise.
	* sysdeps/stub/_exit.c: Likewise.
	* sysdeps/stub/brdinit.c: Likewise.
	* sysdeps/stub/console.c: Likewise.
	* sysdeps/stub/defs.c: Likewise.
	* sysdeps/stub/errlist.c: Likewise.
	* sysdeps/stub/libc_fatal.c: Likewise.
	* sysdeps/stub/siglist.c: Likewise.
	* sysdeps/stub/stdio_init.c: Likewise.
	* sysdeps/stub/strtsupp.c: Likewise.
	* sysdeps/unix/bsd/bsd4.4/tcgetattr.c: Likewise.
	* sysdeps/unix/bsd/bsd4.4/tcsetattr.c: Likewise.
	* sysdeps/unix/bsd/bsd4.4/wait3.c: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/tcflow.c: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/tcflush.c: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/tcgetattr.c: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/tcsendbrk.c: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/wait4.c: Likewise.
	* sysdeps/unix/bsd/ultrix4/mips/sigvec.c: Likewise.
	* sysdeps/unix/bsd/bsdstat.h: Likewise.
	* sysdeps/unix/bsd/clock.c: Likewise.
	* sysdeps/unix/bsd/gtty.c: Likewise.
	* sysdeps/unix/bsd/init-posix.c: Likewise.
	* sysdeps/unix/bsd/setgid.c: Likewise.
	* sysdeps/unix/bsd/setrgid.c: Likewise.
	* sysdeps/unix/bsd/setruid.c: Likewise.
	* sysdeps/unix/bsd/setuid.c: Likewise.
	* sysdeps/unix/bsd/stty.c: Likewise.
	* sysdeps/unix/bsd/telldir.c: Likewise.
	* sysdeps/unix/bsd/ualarm.c: Likewise.
	* sysdeps/unix/common/glue-ctype.c: Likewise.
	* sysdeps/unix/sparc/start.c: Likewise.
	* sysdeps/unix/sysv/irix4/fpathconf.c: Likewise.
	* sysdeps/unix/sysv/irix4/getgroups.c: Likewise.
	* sysdeps/unix/sysv/irix4/getrusage.c: Likewise.
	* sysdeps/unix/sysv/irix4/pathconf.c: Likewise.
	* sysdeps/unix/sysv/irix4/setgroups.c: Likewise.
	* sysdeps/unix/sysv/irix4/sigtramp.c: Likewise.
	* sysdeps/unix/sysv/irix4/start.c: Likewise.
	* sysdeps/unix/sysv/irix4/sysconf.c: Likewise.
	* sysdeps/unix/sysv/sco3.2.4/__setpgid.c: Likewise.
	* sysdeps/unix/sysv/sco3.2.4/getgroups.c: Likewise.
	* sysdeps/unix/sysv/sysv4/__getpgid.c: Likewise.
	* sysdeps/unix/sysv/sysv4/__setpgid.c: Likewise.
	* sysdeps/unix/sysv/sysv4/ftruncate.c: Likewise.
	* sysdeps/unix/sysv/sysv4/gethostname.c: Likewise.
	* sysdeps/unix/sysv/sysv4/getpgid.c: Likewise.
	* sysdeps/unix/sysv/sysv4/sethostname.c: Likewise.
	* sysdeps/unix/sysv/sysv4/setpgid.c: Likewise.
	* sysdeps/unix/sysv/sysv4/setsid.c: Likewise.
	* sysdeps/unix/sysv/gethostname.c: Likewise.
	* sysdeps/unix/sysv/tcgetpgrp.c: Likewise.
	* sysdeps/unix/sysv/tcsetpgrp.c: Likewise.
	* sysdeps/unix/alarm.c: Likewise.
	* sysdeps/unix/make_errlist.c: Likewise.
	* sysdeps/unix/rewinddir.c: Likewise.
	* sysdeps/unix/seekdir.c: Likewise.
	* sysdeps/unix/time.c: Likewise.
	* sysdeps/unix/utime.c: Likewise.
	* sysdeps/vax/__longjmp.c: Likewise.
	* sysdeps/vax/memccpy.c: Likewise.
	* time/strftime.c: Likewise.

1997-05-25 21:57  Miles Bader  <miles@gnu.ai.mit.edu>

	* argp-parse.c (parser_init): For the special case where no
	parsing function is supplied for an argp, propagate its input to
	its first child, if any.

	* argp.h (struct argp_state): `argp' field renamed to `root_argp'.
	* argp-help.c (__argp_state_help, argp_args_usage, hol_help):
	Replace references to STATE->argp with STATE->root_argp.
	* argp-parse.c (parser_init): Likewise.

1997-05-26 14:17  Ulrich Drepper  <drepper@cygnus.com>

	* manual/main.texi: Clarify situation for other not supported ports.
	Proposed by Andreas Jaeger <aj@arthur.rhein-neckar.de>.
	We recommend binutils 2.8.

1997-05-26 12:17  Ulrich Drepper  <drepper@cygnus.com>

	* netinet/in.h: New file.  Wrapper around inet/netinet/in.h.

1997-05-25 09:51  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* sysdeps/i386/elf/start.S: Change local label "nofini"
	to ".Lnofini".

	* sysdeps/i386/i386-mcount.S: Use GOT, instead of GOTOFF.

1997-05-24 17:45  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* gmon/gmon.c (_mcleanup): Free tostruct array allocated in monstartup.

	(dl_main): Define _dl_verbose based on DL_WARN environment variable.
1997-05-26 23:01:17 +00:00

275 lines
7.6 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <hurd.h>
#include <hurd/term.h>
#include <hurd/fd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <limits.h>
#include <cthreads.h> /* For `struct mutex'. */
#include "set-hooks.h"
#include "hurdmalloc.h" /* XXX */
struct mutex _hurd_dtable_lock = MUTEX_INITIALIZER; /* XXX ld bug; must init */
struct hurd_fd **_hurd_dtable;
int _hurd_dtablesize;
DEFINE_HOOK (_hurd_fd_subinit, (void));
/* Initialize the file descriptor table at startup. */
static void
init_dtable (void)
{
int i;
__mutex_init (&_hurd_dtable_lock);
/* The initial size of the descriptor table is that of the passed-in
table. It will be expanded as necessary up to _hurd_dtable_rlimit. */
_hurd_dtablesize = _hurd_init_dtablesize;
/* Allocate the vector of pointers. */
_hurd_dtable = malloc (_hurd_dtablesize * sizeof (*_hurd_dtable));
if (_hurd_dtablesize != 0 && _hurd_dtable == NULL)
__libc_fatal ("hurd: Can't allocate file descriptor table\n");
/* Initialize the descriptor table. */
for (i = 0; (unsigned int) i < _hurd_init_dtablesize; ++i)
{
if (_hurd_init_dtable[i] == MACH_PORT_NULL)
/* An unused descriptor is marked by a null pointer. */
_hurd_dtable[i] = NULL;
else
{
/* Allocate a new file descriptor structure. */
struct hurd_fd *new = malloc (sizeof (struct hurd_fd));
if (new == NULL)
__libc_fatal ("hurd: Can't allocate initial file descriptors\n");
/* Initialize the port cells. */
_hurd_port_init (&new->port, MACH_PORT_NULL);
_hurd_port_init (&new->ctty, MACH_PORT_NULL);
/* Install the port in the descriptor.
This sets up all the ctty magic. */
_hurd_port2fd (new, _hurd_init_dtable[i], 0);
_hurd_dtable[i] = new;
}
}
/* Clear out the initial descriptor table.
Everything must use _hurd_dtable now. */
__vm_deallocate (__mach_task_self (),
(vm_address_t) _hurd_init_dtable,
_hurd_init_dtablesize * sizeof (_hurd_init_dtable[0]));
_hurd_init_dtable = NULL;
_hurd_init_dtablesize = 0;
/* Initialize the remaining empty slots in the table. */
for (; i < _hurd_dtablesize; ++i)
_hurd_dtable[i] = NULL;
/* Run things that want to run after the file descriptor table
is initialized. */
RUN_HOOK (_hurd_fd_subinit, ());
(void) &init_dtable; /* Avoid "defined but not used" warning. */
}
text_set_element (_hurd_subinit, init_dtable);
/* XXX when the linker supports it, the following functions should all be
elsewhere and just have text_set_elements here. */
/* Called by `getdport' to do its work. */
static file_t
get_dtable_port (int fd)
{
file_t dport;
int err = HURD_DPORT_USE (fd, __mach_port_mod_refs (__mach_task_self (),
(dport = port),
MACH_PORT_RIGHT_SEND,
1));
if (err)
{
errno = err;
return MACH_PORT_NULL;
}
else
return dport;
}
file_t (*_hurd_getdport_fn) (int fd) = get_dtable_port;
#include <hurd/signal.h>
/* We are in the child fork; the dtable lock is still held.
The parent has inserted send rights for all the normal io ports,
but we must recover ctty-special ports for ourselves. */
static error_t
fork_child_dtable (void)
{
error_t err;
int i;
err = 0;
for (i = 0; !err && i < _hurd_dtablesize; ++i)
{
struct hurd_fd *d = _hurd_dtable[i];
if (d == NULL)
continue;
/* No other thread is using the send rights in the child task. */
d->port.users = d->ctty.users = NULL;
if (d->ctty.port != MACH_PORT_NULL)
{
/* There was a ctty-special port in the parent.
We need to get one for ourselves too. */
__mach_port_deallocate (__mach_task_self (), d->ctty.port);
err = __term_open_ctty (d->port.port, _hurd_pid, _hurd_pgrp,
&d->ctty.port);
if (err)
d->ctty.port = MACH_PORT_NULL;
}
/* XXX for each fd with a cntlmap, reauth and re-map_cntl. */
}
return err;
(void) &fork_child_dtable; /* Avoid "defined but not used" warning. */
}
data_set_element (_hurd_fork_locks, _hurd_dtable_lock); /* XXX ld bug: bss */
text_set_element (_hurd_fork_child_hook, fork_child_dtable);
/* Called when our process group has changed. */
static void
ctty_new_pgrp (void)
{
int i;
HURD_CRITICAL_BEGIN;
__mutex_lock (&_hurd_dtable_lock);
for (i = 0; i < _hurd_dtablesize; ++i)
{
struct hurd_fd *const d = _hurd_dtable[i];
struct hurd_userlink ulink, ctty_ulink;
io_t port, ctty;
if (d == NULL)
/* Nothing to do for an unused descriptor cell. */
continue;
port = _hurd_port_get (&d->port, &ulink);
ctty = _hurd_port_get (&d->ctty, &ctty_ulink);
if (ctty != MACH_PORT_NULL)
{
/* This fd has a ctty-special port. We need a new one, to tell
the io server of our different process group. */
io_t new;
if (__term_open_ctty (port, _hurd_pid, _hurd_pgrp, &new))
new = MACH_PORT_NULL;
_hurd_port_set (&d->ctty, new);
}
_hurd_port_free (&d->port, &ulink, port);
_hurd_port_free (&d->ctty, &ctty_ulink, ctty);
}
__mutex_unlock (&_hurd_dtable_lock);
HURD_CRITICAL_END;
(void) &ctty_new_pgrp; /* Avoid "defined but not used" warning. */
}
text_set_element (_hurd_pgrp_changed_hook, ctty_new_pgrp);
/* Called to reauthenticate the dtable when the auth port changes. */
static void
reauth_dtable (void)
{
int i;
HURD_CRITICAL_BEGIN;
__mutex_lock (&_hurd_dtable_lock);
for (i = 0; i < _hurd_dtablesize; ++i)
{
struct hurd_fd *const d = _hurd_dtable[i];
mach_port_t new, newctty, ref;
if (d == NULL)
/* Nothing to do for an unused descriptor cell. */
continue;
ref = __mach_reply_port ();
/* Take the descriptor cell's lock. */
__spin_lock (&d->port.lock);
/* Reauthenticate the descriptor's port. */
if (d->port.port != MACH_PORT_NULL &&
! __io_reauthenticate (d->port.port,
ref, MACH_MSG_TYPE_MAKE_SEND) &&
! __USEPORT (AUTH, __auth_user_authenticate
(port,
ref, MACH_MSG_TYPE_MAKE_SEND,
&new)))
{
/* Replace the port in the descriptor cell
with the newly reauthenticated port. */
if (d->ctty.port != MACH_PORT_NULL &&
! __io_reauthenticate (d->ctty.port,
ref, MACH_MSG_TYPE_MAKE_SEND) &&
! __USEPORT (AUTH, __auth_user_authenticate
(port,
ref, MACH_MSG_TYPE_MAKE_SEND,
&newctty)))
_hurd_port_set (&d->ctty, newctty);
_hurd_port_locked_set (&d->port, new);
}
else
/* Lost. Leave this descriptor cell alone. */
__spin_unlock (&d->port.lock);
__mach_port_destroy (__mach_task_self (), ref);
}
__mutex_unlock (&_hurd_dtable_lock);
HURD_CRITICAL_END;
(void) &reauth_dtable; /* Avoid "defined but not used" warning. */
}
text_set_element (_hurd_reauth_hook, reauth_dtable);