Justus Winter, le Wed 11 Jun 2014 13:41:08 +0200, a écrit : > * 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.
Ack. > --- > boot/boot.c | 2 +- > hurd/hurd_types.h | 1 + > hurd/term.defs | 14 +++++++++++++- > term/mig-decls.h | 42 ++++++++++++++++++++++++++++++++++++++++++ > term/mig-mutate.h | 10 +++++++++- > term/term.h | 5 +++++ > term/users.c | 4 +--- > 7 files changed, 72 insertions(+), 6 deletions(-) > create mode 100644 term/mig-decls.h > > diff --git a/boot/boot.c b/boot/boot.c > index ed29014..03617f5 100644 > --- a/boot/boot.c > +++ b/boot/boot.c > @@ -1876,7 +1876,7 @@ S_io_revoke (mach_port_t obj, > support on the console device. */ > > kern_return_t > -S_termctty_open_terminal (mach_port_t object, > +S_termctty_open_terminal (ctty_t object, > int flags, > mach_port_t *result, > mach_msg_type_name_t *restype) > diff --git a/hurd/hurd_types.h b/hurd/hurd_types.h > index 8eac206..4341177 100644 > --- a/hurd/hurd_types.h > +++ b/hurd/hurd_types.h > @@ -49,6 +49,7 @@ typedef mach_port_t fs_notify_t; > typedef mach_port_t exec_startup_t; > typedef mach_port_t interrupt_t; > typedef mach_port_t proccoll_t; > +typedef mach_port_t ctty_t; > > #include <errno.h> /* Defines `error_t'. */ > > diff --git a/hurd/term.defs b/hurd/term.defs > index 17ba4f3..45d825d 100644 > --- a/hurd/term.defs > +++ b/hurd/term.defs > @@ -29,6 +29,18 @@ TERM_IMPORTS > > INTR_INTERFACE > > +type ctty_t = mach_port_copy_send_t > +#ifdef CTTY_INTRAN > +intran: CTTY_INTRAN > +#endif > +#ifdef CTTY_OUTTRAN > +outtran: CTTY_OUTTRAN > +#endif > +#ifdef CTTY_DESTRUCTOR > +destructor: CTTY_DESTRUCTOR > +#endif > +; > + > /* Find out what the controlling terminal ID port is. */ > routine term_getctty ( > terminal: io_t; > @@ -109,7 +121,7 @@ routine term_on_pty ( > not be made to terminal I/O ports. Return an unauthenticated I/O > port for the terminal opened as with flags FLAGS. */ > routine termctty_open_terminal ( > - ctty: mach_port_t; > + ctty: ctty_t; > flags: int; > out terminal: mach_port_send_t); > > diff --git a/term/mig-decls.h b/term/mig-decls.h > new file mode 100644 > index 0000000..c91b133 > --- /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 a6b99fe..1545719 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 df82b6c..3067425 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 9bd51d0..8151dc7 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; > } > > -- > 2.0.0 > -- Samuel The nice thing about Windows is - It does not just crash, it displays a dialog box and lets you press 'OK' first. (Arno Schaefer's .sig)