Skip to content

Commit

Permalink
Clean up Hurd TIOCSCTTY.
Browse files Browse the repository at this point in the history
  • Loading branch information
Carl Fredrik Hammar authored and Roland McGrath committed Feb 17, 2010
1 parent 0ea5278 commit 951ca0c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 19 deletions.
3 changes: 3 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
2010-02-17 Carl Fredrik Hammar <hammy.lite@gmail.com>

* hurd/hurdioctl.c (tiocsctty): Only get FD ports, do work in...
(tiocsctty_port): ...this new function.

* hurd/hurd/ioctl.h (_HURD_HANDLE_IOCTLS_1): Cast to
`ioctl_handler_t'.

Expand Down
44 changes: 25 additions & 19 deletions hurd/hurdioctl.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* ioctl commands which must be done in the C library.
Copyright (C) 1994,95,96,97,99,2001,2002,2009
Copyright (C) 1994,95,96,97,99,2001,2002,2009,2010
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Expand Down Expand Up @@ -239,34 +239,40 @@ _hurd_setcttyid (mach_port_t cttyid)
}


/* Make FD be the controlling terminal.
This function is called for `ioctl (fd, TCIOSCTTY)'. */

static int
tiocsctty (int fd,
int request) /* Always TIOCSCTTY. */
static inline error_t
do_tiocsctty (io_t port, io_t ctty)
{
mach_port_t cttyid;
error_t err;

/* Get FD's cttyid port, unless it is already ours. */
err = HURD_DPORT_USE (fd, ctty != MACH_PORT_NULL ? EADDRINUSE :
__term_getctty (port, &cttyid));
if (err == EADDRINUSE)
/* FD is already the ctty. Nothing to do. */
if (ctty != MACH_PORT_NULL)
/* PORT is already the ctty. Nothing to do. */
return 0;
else if (err)
return __hurd_fail (err);

/* Get PORT's cttyid port. */
err = __term_getctty (port, &cttyid);
if (err)
return err;

/* Change the terminal's pgrp to ours. */
err = HURD_DPORT_USE (fd, __tioctl_tiocspgrp (port, _hurd_pgrp));
err = __tioctl_tiocspgrp (port, _hurd_pgrp);
if (err)
return __hurd_fail (err);
__mach_port_deallocate (__mach_task_self (), cttyid);
else
/* Make it our own. */
install_ctty (cttyid);

/* Make it our own. */
install_ctty (cttyid);
return err;
}

return 0;
/* Make FD be the controlling terminal.
This function is called for `ioctl (fd, TCIOSCTTY)'. */

static int
tiocsctty (int fd,
int request) /* Always TIOCSCTTY. */
{
return __hurd_fail (HURD_DPORT_USE (fd, tiocsctty_port (port, ctty)));
}
_HURD_HANDLE_IOCTL (tiocsctty, TIOCSCTTY);

Expand Down

0 comments on commit 951ca0c

Please sign in to comment.