summaryrefslogtreecommitdiff
path: root/libfshelp/fshelp.h
diff options
context:
space:
mode:
authorMichael I. Bushnell <mib@gnu.org>1994-02-01 21:16:08 +0000
committerMichael I. Bushnell <mib@gnu.org>1994-02-01 21:16:08 +0000
commit978e68cbe83671bfdc55e41ef52eb119f7e699cd (patch)
tree5f12182f4654f3ec4cbd30492df1d23fd265aefd /libfshelp/fshelp.h
parentdf696a8d35be69cfe695188c86734c9878e7a0b1 (diff)
Formerly fshelp.h.~2~
Diffstat (limited to 'libfshelp/fshelp.h')
-rw-r--r--libfshelp/fshelp.h61
1 files changed, 55 insertions, 6 deletions
diff --git a/libfshelp/fshelp.h b/libfshelp/fshelp.h
index e9474751..957ea39f 100644
--- a/libfshelp/fshelp.h
+++ b/libfshelp/fshelp.h
@@ -46,9 +46,58 @@ extern int fshelp_transboot_port_type;
normally from your main node initialization routine. */
void fshelp_init_trans_link (struct trans_link *LINK);
-/* Call this when the CONTROL field of a translator is null and
- you want to have the translator started so you can talk to it.
- LINK is the trans_link structure for this node; NAME is the file
- to execute as the translator.
-*/
-void fshelp_start_translator
+/* The user must define this function. This is used to create ports
+ for translator startup from files. NODE identifies the file for
+ which a port is required; UID and GID identifies the identity of
+ the user for the open. Both arguments are opaque to the library
+ (and must be provided to the fshelp_start_translator call). This
+ should return the name of a receive right from which exactly one
+ send right will be created. */
+void fshelp_get_node_port (void *node, uid_t uid, gid_t gid);
+
+/* Call this when the control field of a translator is null and you
+ want to have the translator started so you can talk to it. LINK is
+ the trans_link structure for this node; NAME is the file to execute
+ as the translator (*NAME may be modified). fshelp_get_node_port
+ will be called with DIR and NODE as necessary. (These values must
+ remain valid until fshelp_done_with_node is called.) DIR should
+ refer to the directory holding the node being translater, and will
+ be provided as the cwdir of the process and as the dotdot return
+ value from fsys_startup. NODE will should refer to the node being
+ translated, and will be provided as the realnode return value from
+ fsys_startup. UID and GID will be provided as the second and third
+ arguments to fshelp_get_node_port for both these calls. LOCK must
+ be a mutex which you hold; it is assumed that the trans_link
+ structure will not be changed unless this is held. */
+error_t fshelp_start_translator (struct trans_link *link, char *name,
+ void *dir, void *node, uid_t uid, gid_t gid,
+ struct mutex *lock);
+
+/* The user must define this function. This will be called for the
+ DIR and NODE arguments to fshelp_start_translator when the library
+ no longer needs them. */
+void fshelp_done_with_node (void *);
+
+/* Call this when you receive a fsys_startup message on a port of type
+ fshelp_transboot_port_type. PORTSTRUCT is the result of
+ ports_check_port_type/ports_get_port; this routine does not call
+ ports_done_with_port so the caller normally should. CTL, REAL,
+ REALPOLY, DOTDOT, and DOTDOTPOLY are copied from the fsys_startup
+ message; CTL will be installed as the control field of the
+ translator making this call, *REAL will be set to be the underlying
+ port (by calling the MAKE_PORT function set at
+ fshelp_start_translator time with the NODE argument to that call);
+ *DOTDOT will be set similarly, but from the DIR argument to
+ fshelp_start_translator. *REALPOLY and *DOTDOTPOLY will be set to
+ the Mach message transmission types for those two ports. */
+error_t fshelp_handle_fsys_startup (void *portstruct, mach_port_t ctl,
+ mach_port_t *real,
+ mach_msg_type_name_t *realpoly,
+ mach_port_t *dotdot,
+ mach_msg_type_name_t *dotdotpoly);
+
+/* Install this routine as the ports library type-specific clean routine
+ for ports of type fshelp_transboot_port_type. */
+void fshelp_transboot_clean (void *arg);
+
+