Justus Winter, le Thu 27 Nov 2014 14:18:48 +0100, a écrit : > * libtrivfs/mig-decls.h (trivfs_begin_using_protid_payload): New function. > (trivfs_begin_using_control_payload): Likewise. > * libtrivfs/mig-mutate.h: Add mutators.
Ack. > --- > libtrivfs/mig-decls.h | 58 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > libtrivfs/mig-mutate.h | 3 +++ > 2 files changed, 61 insertions(+) > > diff --git a/libtrivfs/mig-decls.h b/libtrivfs/mig-decls.h > index 2baaee8..13a9eb7 100644 > --- a/libtrivfs/mig-decls.h > +++ b/libtrivfs/mig-decls.h > @@ -61,6 +61,35 @@ trivfs_begin_using_protid (mach_port_t port) > return ports_lookup_port (0, port, > trivfs_dynamic_protid_port_classes[0]); > } > > +static inline struct trivfs_protid * __attribute__ ((unused)) > +trivfs_begin_using_protid_payload (unsigned long payload) > +{ > + if (trivfs_protid_nportclasses + trivfs_num_dynamic_protid_port_classes > > 1) > + { > + struct port_info *pi = ports_lookup_payload (NULL, payload, NULL); > + int i; > + > + if (pi) > + { > + for (i = 0; i < trivfs_protid_nportclasses; i++) > + if (pi->class == trivfs_protid_portclasses[i]) > + return (struct trivfs_protid *) pi; > + for (i = 0; i < trivfs_num_dynamic_protid_port_classes; i++) > + if (pi->class == trivfs_dynamic_protid_port_classes[i]) > + return (struct trivfs_protid *) pi; > + ports_port_deref (pi); > + } > + > + return NULL; > + } > + else if (trivfs_protid_nportclasses == 1) > + return ports_lookup_payload (NULL, payload, > + trivfs_protid_portclasses[0]); > + else > + return ports_lookup_payload (NULL, payload, > + trivfs_dynamic_protid_port_classes[0]); > +} > + > static inline void __attribute__ ((unused)) > trivfs_end_using_protid (struct trivfs_protid *cred) > { > @@ -95,6 +124,35 @@ trivfs_begin_using_control (mach_port_t port) > return ports_lookup_port (0, port, > trivfs_dynamic_control_port_classes[0]); > } > > +static inline struct trivfs_control * __attribute__ ((unused)) > +trivfs_begin_using_control_payload (unsigned long payload) > +{ > + if (trivfs_cntl_nportclasses + trivfs_num_dynamic_control_port_classes > 1) > + { > + struct port_info *pi = ports_lookup_payload (NULL, payload, NULL); > + int i; > + > + if (pi) > + { > + for (i = 0; i < trivfs_cntl_nportclasses; i++) > + if (pi->class == trivfs_cntl_portclasses[i]) > + return (struct trivfs_control *) pi; > + for (i = 0; i < trivfs_num_dynamic_control_port_classes; i++) > + if (pi->class == trivfs_dynamic_control_port_classes[i]) > + return (struct trivfs_control *) pi; > + ports_port_deref (pi); > + } > + > + return NULL; > + } > + else if (trivfs_cntl_nportclasses == 1) > + return ports_lookup_payload (NULL, payload, > + trivfs_cntl_portclasses[0]); > + else > + return ports_lookup_payload (NULL, payload, > + trivfs_dynamic_control_port_classes[0]); > +} > + > static inline void __attribute__ ((unused)) > trivfs_end_using_control (struct trivfs_control *cred) > { > diff --git a/libtrivfs/mig-mutate.h b/libtrivfs/mig-mutate.h > index cc15d38..dcbebf6 100644 > --- a/libtrivfs/mig-mutate.h > +++ b/libtrivfs/mig-mutate.h > @@ -20,13 +20,16 @@ > #define REPLY_PORTS > > #define FILE_INTRAN trivfs_protid_t trivfs_begin_using_protid (file_t) > +#define FILE_INTRAN_PAYLOAD trivfs_protid_t trivfs_begin_using_protid_payload > #define FILE_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t) > #define FILE_IMPORTS import "libtrivfs/mig-decls.h"; > > #define IO_INTRAN trivfs_protid_t trivfs_begin_using_protid (io_t) > +#define IO_INTRAN_PAYLOAD trivfs_protid_t trivfs_begin_using_protid_payload > #define IO_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t) > #define IO_IMPORTS import "libtrivfs/mig-decls.h"; > > #define FSYS_INTRAN trivfs_control_t trivfs_begin_using_control (fsys_t) > +#define FSYS_INTRAN_PAYLOAD trivfs_control_t > trivfs_begin_using_control_payload > #define FSYS_DESTRUCTOR trivfs_end_using_control (trivfs_control_t) > #define FSYS_IMPORTS import "libtrivfs/mig-decls.h"; > -- > 2.1.3 > -- Samuel <b> lisons de l'assembleur c -+- #sos - CrisC forever -+-