bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] term: fix receiver lookups in the term server functions


From: Samuel Thibault
Subject: Re: [PATCH 2/2] term: fix receiver lookups in the term server functions
Date: Fri, 28 Feb 2014 15:03:27 -0500
User-agent: Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30)

Justus Winter, le Fri 28 Feb 2014 20:12:25 +0100, a écrit :
> * term/mig-mutate.h: Define TERM_IMPORTS.
> * term/Makefile: Set term-MIGSFLAGS.
> * term/users.c: Fix receiver lookups in the term server functions.

Ack.

Actually, ack on all patches which are exactly like that, don't bother
to submit them on the list, we have agreed on the principle, so feel
free to just commit this exact kind of changes.

> ---
>  term/Makefile     |  1 +
>  term/mig-mutate.h |  1 +
>  term/users.c      | 82 
> ++++++++++++++++++++++++++-----------------------------
>  3 files changed, 40 insertions(+), 44 deletions(-)
> 
> diff --git a/term/Makefile b/term/Makefile
> index 9537c60..5006c0d 100644
> --- a/term/Makefile
> +++ b/term/Makefile
> @@ -34,3 +34,4 @@ include ../Makeconf
>  device_replyServer-CPPFLAGS = -DTypeCheck=0 -Wno-unused # XXX
>  
>  tioctl-MIGSFLAGS = -imacros $(srcdir)/mig-mutate.h
> +term-MIGSFLAGS = -imacros $(srcdir)/mig-mutate.h
> diff --git a/term/mig-mutate.h b/term/mig-mutate.h
> index 7cc13aa..a6b99fe 100644
> --- a/term/mig-mutate.h
> +++ b/term/mig-mutate.h
> @@ -22,3 +22,4 @@
>  #define IO_INTRAN trivfs_protid_t trivfs_begin_using_protid (io_t)
>  #define IO_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t)
>  #define TIOCTL_IMPORTS import "../libtrivfs/mig-decls.h";
> +#define TERM_IMPORTS import "../libtrivfs/mig-decls.h";
> diff --git a/term/users.c b/term/users.c
> index 3f55839..9ec9594 100644
> --- a/term/users.c
> +++ b/term/users.c
> @@ -352,15 +352,15 @@ trivfs_modify_stat (struct trivfs_protid *cred, struct 
> stat *st)
>  
>  /* Implement term_getctty as described in <hurd/term.defs>.  */
>  kern_return_t
> -S_term_getctty (mach_port_t arg,
> +S_term_getctty (struct trivfs_protid *cred,
>               mach_port_t *id,
>               mach_msg_type_name_t *idtype)
>  {
> -  struct trivfs_protid *cred = ports_lookup_port (term_bucket,
> -                                               arg, tty_class);
>    error_t err;
>  
> -  if (!cred)
> +  if (!cred
> +      || cred->pi.bucket != term_bucket
> +      || cred->pi.class != tty_class)
>      return EOPNOTSUPP;
>  
>    pthread_mutex_lock (&global_lock);
> @@ -373,7 +373,6 @@ S_term_getctty (mach_port_t arg,
>        *idtype = MACH_MSG_TYPE_MAKE_SEND;
>        err = 0;
>      }
> -  ports_port_deref (cred);
>    pthread_mutex_unlock (&global_lock);
>    return err;
>  }
> @@ -390,7 +389,6 @@ S_termctty_open_terminal (mach_port_t arg,
>    struct iouser *user;
>    struct trivfs_protid *newcred;
>    struct port_info *pi = ports_lookup_port (term_bucket, arg, cttyid_class);
> -
>    if (!pi)
>      return EOPNOTSUPP;
>  
> @@ -417,7 +415,7 @@ S_termctty_open_terminal (mach_port_t arg,
>  
>  /* Implement term_become_ctty as described in <hurd/term.defs>.  */
>  kern_return_t
> -S_term_open_ctty (mach_port_t arg,
> +S_term_open_ctty (struct trivfs_protid *cred,
>                 pid_t pid,
>                 pid_t pgrp,
>                 mach_port_t *newpt,
> @@ -425,14 +423,14 @@ S_term_open_ctty (mach_port_t arg,
>  {
>    error_t err;
>    struct trivfs_protid *newcred;
> -  struct trivfs_protid *cred = ports_lookup_port (term_bucket, arg, 
> tty_class);
>  
> -  if (!cred)
> +  if (!cred
> +      || cred->pi.bucket != term_bucket
> +      || cred->pi.class != tty_class)
>      return EOPNOTSUPP;
>  
>    if (pid <= 0 || pgrp <= 0)
>      {
> -      ports_port_deref (cred);
>        return EINVAL;
>      }
>  
> @@ -469,8 +467,6 @@ S_term_open_ctty (mach_port_t arg,
>       }
>      }
>  
> -  ports_port_deref (cred);
> -
>    return err;
>  }
>  
> @@ -2132,62 +2128,62 @@ report_carrier_error (error_t err)
>  }
>  
>  kern_return_t
> -S_term_get_nodename (io_t arg,
> +S_term_get_nodename (struct trivfs_protid *cred,
>                    char *name)
>  {
> -  struct trivfs_protid *cred = ports_lookup_port (term_bucket, arg,
> -                                               tty_class);
> -  if (!cred)
> +  if (!cred
> +      || cred->pi.bucket != term_bucket
> +      || cred->pi.class != tty_class)
>      return EOPNOTSUPP;
>  
>    if (!cred->po->cntl->hook)
>      {
> -      ports_port_deref (cred);
>        return ENOENT;
>      }
>  
>    strcpy (name, (char *)cred->po->cntl->hook);
>  
> -  ports_port_deref (cred);
>    return 0;
>  }
>  
>  kern_return_t
> -S_term_set_nodename (io_t arg,
> +S_term_set_nodename (struct trivfs_protid *cred,
>                    char *name)
>  {
>    error_t err = 0;
> -  struct trivfs_protid *cred = ports_lookup_port (term_bucket, arg, 
> tty_class);
> -  if (!cred)
> +  if (!cred
> +      || cred->pi.bucket != term_bucket
> +      || cred->pi.class != tty_class)
>      return EOPNOTSUPP;
>  
>    if (strcmp (name, (char *)cred->po->cntl->hook) != 0)
>      err = EINVAL;
>  
> -  ports_port_deref (cred);
>    return err;
>  }
>  
>  kern_return_t
> -S_term_set_filenode (io_t arg,
> +S_term_set_filenode (struct trivfs_protid *cred,
>                    file_t filenode)
>  {
> -  struct trivfs_protid *cred = ports_lookup_port (term_bucket, arg,
> -                                               tty_class);
> -  if (!cred)
> +  if (!cred
> +      || cred->pi.bucket != term_bucket
> +      || cred->pi.class != tty_class)
>      return EOPNOTSUPP;
> -  ports_port_deref (cred);
>  
>    return EINVAL;
>  }
>  
>  kern_return_t
> -S_term_get_peername (io_t arg,
> +S_term_get_peername (struct trivfs_protid *cred,
>                    char *name)
>  {
> -  struct trivfs_protid *cred = ports_lookup_port (term_bucket, arg, 0);
>    struct trivfs_control *peer;
>  
> +  if (!cred
> +      || cred->pi.bucket != term_bucket)
> +    return EOPNOTSUPP;
> +
>    if (!cred || (cred->pi.class != tty_class && cred->pi.class != pty_class))
>      {
>        if (cred)
> @@ -2204,47 +2200,45 @@ S_term_get_peername (io_t arg,
>      }
>  
>    strcpy (name, (char *) peer->hook);
> -  ports_port_deref (cred);
>  
>    return 0;
>  }
>  
>  kern_return_t
> -S_term_get_bottom_type (io_t arg,
> +S_term_get_bottom_type (struct trivfs_protid *cred,
>                       int *ttype)
>  {
> -  struct trivfs_protid *cred = ports_lookup_port (term_bucket,
> -                                               arg, tty_class);
> -  if (!cred)
> +  if (!cred
> +      || cred->pi.bucket != term_bucket
> +      || cred->pi.class != tty_class)
>      return EOPNOTSUPP;
>  
> -  ports_port_deref (cred);
>    *ttype = bottom->type;
>    return 0;
>  }
>  
>  kern_return_t
> -S_term_on_machdev (io_t arg,
> +S_term_on_machdev (struct trivfs_protid *cred,
>                  device_t machdev)
>  {
> -  struct trivfs_protid *cred = ports_lookup_port (term_bucket, arg,
> -                                               tty_class);
> -  if (!cred)
> +  if (!cred
> +      || cred->pi.bucket != term_bucket
> +      || cred->pi.class != tty_class)
>      return EOPNOTSUPP;
> -  ports_port_deref (cred);
> +
>    return EINVAL;
>  }
>  
>  kern_return_t
> -S_term_on_hurddev (io_t arg,
> -                io_t hurddev)
> +S_term_on_hurddev (struct trivfs_protid *cred,
> +                struct trivfs_protid *hurddev)
>  {
>    return EOPNOTSUPP;
>  }
>  
>  kern_return_t
> -S_term_on_pty (io_t arg,
> -            mach_port_t *master)
> +S_term_on_pty (struct trivfs_protid *cred,
> +            struct trivfs_protid **master)
>  {
>    return EOPNOTSUPP;
>  }
> -- 
> 1.8.5.3
> 

-- 
Samuel
<y> t1 faich
<y> les programmes ils segfaultent jamais quand on veut
 -+- #ens-mim en plein débogage -+-



reply via email to

[Prev in Thread] Current Thread [Next in Thread]