summaryrefslogtreecommitdiff
path: root/debian/patches/random-fixes0006-trans-magic-convert-to-trivfs-dynamic-classes-and-bu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/random-fixes0006-trans-magic-convert-to-trivfs-dynamic-classes-and-bu.patch')
-rw-r--r--debian/patches/random-fixes0006-trans-magic-convert-to-trivfs-dynamic-classes-and-bu.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/debian/patches/random-fixes0006-trans-magic-convert-to-trivfs-dynamic-classes-and-bu.patch b/debian/patches/random-fixes0006-trans-magic-convert-to-trivfs-dynamic-classes-and-bu.patch
new file mode 100644
index 00000000..31fd99d0
--- /dev/null
+++ b/debian/patches/random-fixes0006-trans-magic-convert-to-trivfs-dynamic-classes-and-bu.patch
@@ -0,0 +1,78 @@
+From 580eeae985138272dc0f8c24d1e7f470e31fbcc3 Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Sun, 27 Sep 2015 23:35:26 +0200
+Subject: [PATCH hurd 06/11] trans/magic: convert to trivfs dynamic classes and
+ buckets
+
+libtrivfs contains two ways of managing more than one port class and
+bucket. There is the old way of using a statically allocated array
+with explicit length, and the new way with dynamically allocated
+vectors.
+
+Converting all users to the new way of handling multiple classes
+and/or buckets, we can simplify the code in libtrivfs. In many cases,
+the code will be simpler and more expressive for the user.
+
+This also fixes a severe bug. As no classes are given to
+`trivfs_startup', they are created and inserted into the dynamic
+vector of classes. The server function `trivfs_S_fsys_forward',
+however, used the first item of the previously used static array,
+which is NULL. This circumvented the typecheck.
+
+* trans/magic.c: Convert to dynamic classes and buckets.
+---
+ trans/magic.c | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/trans/magic.c b/trans/magic.c
+index 5808483..a033db9 100644
+--- a/trans/magic.c
++++ b/trans/magic.c
+@@ -74,6 +74,9 @@ static struct trivfs_control *all_fsys;
+
+ /* Trivfs hooks */
+
++/* Our port class. */
++struct port_class *trivfs_protid_class;
++
+ int trivfs_fstype = FSTYPE_DEV;
+ int trivfs_fsid = 0;
+
+@@ -480,8 +483,12 @@ main (int argc, char **argv)
+ if (m->directory)
+ trivfs_peropen_destroy_hook = &magic_peropen_destroy;
+
++ err = trivfs_add_protid_port_class (&trivfs_protid_class);
++ if (err)
++ error (1, 0, "error creating protid port class");
++
+ /* Reply to our parent */
+- err = trivfs_startup (bootstrap, 0, 0, 0, 0, 0, &fsys);
++ err = trivfs_startup (bootstrap, 0, 0, 0, trivfs_protid_class, 0, &fsys);
+ mach_port_deallocate (mach_task_self (), bootstrap);
+ if (err)
+ error (3, err, "Contacting parent");
+@@ -521,8 +528,7 @@ trivfs_S_fsys_forward (mach_port_t server,
+ char *argz, size_t argz_len)
+ {
+ struct trivfs_protid *cred
+- = ports_lookup_port (all_fsys->pi.bucket, server,
+- trivfs_protid_portclasses[0]);
++ = ports_lookup_port (all_fsys->pi.bucket, server, trivfs_protid_class);
+ if (!cred)
+ return EOPNOTSUPP;
+ ports_port_deref (cred);
+@@ -547,8 +553,8 @@ trivfs_S_fsys_forward (mach_port_t server,
+ /* Now we are ready to start up the filesystem. Contact the parent. */
+ struct trivfs_control *fsys;
+ err = trivfs_startup (requestor, 0,
+- trivfs_cntl_portclasses[0], all_fsys->pi.bucket,
+- trivfs_protid_portclasses[0], all_fsys->pi.bucket,
++ NULL, all_fsys->pi.bucket,
++ NULL, all_fsys->pi.bucket,
+ &fsys);
+ if (err)
+ {
+--
+2.1.4
+