summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libtrivfs/trivfs.h44
1 files changed, 39 insertions, 5 deletions
diff --git a/libtrivfs/trivfs.h b/libtrivfs/trivfs.h
index 30dace8f..8e62db68 100644
--- a/libtrivfs/trivfs.h
+++ b/libtrivfs/trivfs.h
@@ -84,6 +84,11 @@ extern int trivfs_support_exec;
operations.) */
extern int trivfs_allow_open;
+/* If the user defines these, they should be vectors (and the associated
+ sizes) of port classes that will be translated into control & protid
+ pointers for passing to rpcs, in addition to those passed to or created by
+ trivfs_create_control (or trivfs_startup) will automatically be
+ recognized. */
extern struct port_class *trivfs_protid_portclasses[];
extern int trivfs_protid_nportclasses;
extern struct port_class *trivfs_cntl_portclasses[];
@@ -136,10 +141,11 @@ error_t (*trivfs_getroot_hook) (struct trivfs_control *cntl,
/* Creates a control port for this filesystem and sends it to BOOTSTRAP with
fsys_startup. CONTROL_CLASS & CONTROL_BUCKET are passed to the ports
library to create the control port, and PROTID_CLASS & PROTID_BUCKET are
- used when creating ports representing opens of this node. If CONTROL
- isn't NULL, the trivfs control port is return in it. If any error occurs
- sending fsys_startup, it is returned, otherwise 0. FLAGS specifies how to
- open the underlying node (O_*). */
+ used when creating ports representing opens of this node; any of these may
+ be zero, in which case an appropriate port class/bucket is created. If
+ CONTROL isn't NULL, the trivfs control port is return in it. If any error
+ occurs sending fsys_startup, it is returned, otherwise 0. FLAGS specifies
+ how to open the underlying node (O_*). */
error_t trivfs_startup (mach_port_t bootstrap, int flags,
struct port_class *control_class,
struct port_bucket *control_bucket,
@@ -151,7 +157,8 @@ error_t trivfs_startup (mach_port_t bootstrap, int flags,
return it in CONTROL. CONTROL_CLASS & CONTROL_BUCKET are passed to
the ports library to create the control port, and PROTID_CLASS &
PROTID_BUCKET are used when creating ports representing opens of this
- node. */
+ node; any of these may be zero, in which case an appropriate port
+ class/bucket is created. */
error_t
trivfs_create_control (mach_port_t underlying,
struct port_class *control_class,
@@ -209,5 +216,32 @@ error_t trivfs_set_options (struct trivfs_control *fsys,
routine simply calls diskfs_append_std_options. */
error_t trivfs_append_args (struct trivfs_control *fsys,
char **argz, size_t *argz_len);
+
+/* Add the port class *CLASS to the list of control port classes recognized
+ by trivfs; if *CLASS is 0, an attempt is made to allocate a new port
+ class, which is stored in *CLASS. */
+error_t trivfs_add_control_port_class (struct port_class **class);
+
+/* Remove the previously added dynamic control port class CLASS, freeing it
+ if it was allocated by trivfs_add_control_port_class. */
+void trivfs_remove_control_port_class (struct port_class *class);
+
+/* Add the port class *CLASS to the list of protid port classes recognized by
+ trivfs; if *CLASS is 0, an attempt is made to allocate a new port class,
+ which is stored in *CLASS. */
+error_t trivfs_add_protid_port_class (struct port_class **class);
+
+/* Remove the previously added dynamic protid port class CLASS, freeing it
+ if it was allocated by trivfs_add_protid_port_class. */
+void trivfs_remove_protid_port_class (struct port_class *class);
+
+/* Add the port bucket *BUCKET to the list of dynamically allocated port
+ buckets; if *bucket is 0, an attempt is made to allocate a new port
+ bucket, which is then stored in *bucket. */
+error_t trivfs_add_port_bucket (struct port_bucket **bucket);
+
+/* Remove the previously added dynamic port bucket BUCKET, freeing it
+ if it was allocated by trivfs_add_port_bucket. */
+void trivfs_remove_port_bucket (struct port_bucket *bucket);
#endif /* __TRIVFS_H__ */