diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-06-10 16:20:37 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-06-15 17:55:51 +0200 |
commit | 6f874305906b18a6bd7ba02f7dee949948e41262 (patch) | |
tree | cfa1119d8a9c92648eb91d2f1a43185998bbd792 /term | |
parent | d73b0ee5f32bdf769a5d9d19c4cc590df07c1bef (diff) |
hurd: fix receiver lookup in termctty_open_terminal
* hurd/hurd_types.h (ctty_t): New type definition.
* hurd/term.defs (ctty_t): New type definition.
* term/mig-decls.h: New file.
* term/mig-mutate.h: Add mutators, includes.
* term/term.h: Add include guards.
* term/users.c (S_termctty_open_terminal): Fix receiver lookup.
* boot/boot.c (S_termctty_open_terminal): Likewise.
Diffstat (limited to 'term')
-rw-r--r-- | term/mig-decls.h | 42 | ||||
-rw-r--r-- | term/mig-mutate.h | 10 | ||||
-rw-r--r-- | term/term.h | 5 | ||||
-rw-r--r-- | term/users.c | 4 |
4 files changed, 57 insertions, 4 deletions
diff --git a/term/mig-decls.h b/term/mig-decls.h new file mode 100644 index 00000000..c91b133a --- /dev/null +++ b/term/mig-decls.h @@ -0,0 +1,42 @@ +/* + Copyright (C) 2014 Free Software Foundation, Inc. + Written by Justus Winter. + + This file is part of the GNU Hurd. + + The GNU Hurd is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + The GNU Hurd 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 + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the GNU Hurd. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef __TERM_MIG_DECLS_H__ +#define __TERM_MIG_DECLS_H__ + +#include <hurd/ports.h> + +#include "term.h" + +/* Called by server stub functions. */ + +static inline struct port_info * __attribute__ ((unused)) +begin_using_ctty_port (mach_port_t port) +{ + return ports_lookup_port (term_bucket, port, cttyid_class); +} + +static inline void __attribute__ ((unused)) +end_using_ctty (struct port_info *p) +{ + if (p) + ports_port_deref (p); +} + +#endif /* __TERM_MIG_DECLS_H__ */ diff --git a/term/mig-mutate.h b/term/mig-mutate.h index a6b99fe6..15457192 100644 --- a/term/mig-mutate.h +++ b/term/mig-mutate.h @@ -21,5 +21,13 @@ #define IO_INTRAN trivfs_protid_t trivfs_begin_using_protid (io_t) #define IO_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t) + +#define CTTY_INTRAN \ + port_info_t begin_using_ctty_port (mach_port_t) +#define CTTY_DESTRUCTOR \ + end_using_ctty (port_info_t) + #define TIOCTL_IMPORTS import "../libtrivfs/mig-decls.h"; -#define TERM_IMPORTS import "../libtrivfs/mig-decls.h"; +#define TERM_IMPORTS \ + import "../libtrivfs/mig-decls.h"; \ + import "mig-decls.h"; diff --git a/term/term.h b/term/term.h index df82b6c9..3067425c 100644 --- a/term/term.h +++ b/term/term.h @@ -18,6 +18,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ +#ifndef __HURD_TERM_H__ +#define __HURD_TERM_H__ + #include <pthread.h> #include <assert.h> #include <errno.h> @@ -391,3 +394,5 @@ error_t pty_io_select (struct trivfs_protid *, mach_port_t, error_t pty_open_hook (struct trivfs_control *, struct iouser *, int); error_t pty_po_create_hook (struct trivfs_peropen *); error_t pty_po_destroy_hook (struct trivfs_peropen *); + +#endif /* __HURD_TERM_H__ */ diff --git a/term/users.c b/term/users.c index 9bd51d05..8151dc70 100644 --- a/term/users.c +++ b/term/users.c @@ -379,7 +379,7 @@ S_term_getctty (struct trivfs_protid *cred, /* Implement termctty_open_terminal as described in <hurd/term.defs>. */ kern_return_t -S_termctty_open_terminal (mach_port_t arg, +S_termctty_open_terminal (struct port_info *pi, int flags, mach_port_t *result, mach_msg_type_name_t *resulttype) @@ -388,7 +388,6 @@ S_termctty_open_terminal (mach_port_t arg, mach_port_t new_realnode; struct iouser *user; struct trivfs_protid *newcred; - struct port_info *pi = ports_lookup_port (term_bucket, arg, cttyid_class); if (!pi) return EOPNOTSUPP; @@ -409,7 +408,6 @@ S_termctty_open_terminal (mach_port_t arg, } } - ports_port_deref (pi); return err; } |