diff options
| author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-09-27 23:41:49 +0200 |
|---|---|---|
| committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-09-27 23:41:49 +0200 |
| commit | 8933895df3b07ae5d8c48c62e7067a55c4d159d1 (patch) | |
| tree | c1e77ef2458de251c14040d133ff530f0cde0e26 /debian/patches/random-fixes0006-trans-magic-convert-to-trivfs-dynamic-classes-and-bu.patch | |
| parent | 23b448e63c39ab8d068d39850f7a862c122dd920 (diff) | |
add patch series
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.patch | 78 |
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 + |
