summaryrefslogtreecommitdiff
path: root/trans
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2013-12-03 19:37:54 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2013-12-04 12:05:00 +0100
commitc7030a9c0ac36cccb07ef562908b62c2ef9d8bb4 (patch)
tree351eef89e3fd5f985ae484f3b1277b14cbf95417 /trans
parentbbe90168171e6aa8bc0045162ef9f03a01e36309 (diff)
trans: improve the netfs_demuxer function in fakeroot.c
Handle multiple request types as recommended by the Mach Server Writer's Guide section 4, subsection "Handling Multiple Request Types". This avoids initializing the reply message in every X_server function. The reply message has already been properly initialized in libports, so there is no need to call mig_reply_setup. * trans/fakeroot.c (netfs_demuxer): Improve the demuxer function.
Diffstat (limited to 'trans')
-rw-r--r--trans/fakeroot.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/trans/fakeroot.c b/trans/fakeroot.c
index f3df46ba..679e4765 100644
--- a/trans/fakeroot.c
+++ b/trans/fakeroot.c
@@ -838,20 +838,26 @@ int
netfs_demuxer (mach_msg_header_t *inp,
mach_msg_header_t *outp)
{
- int netfs_fs_server (mach_msg_header_t *, mach_msg_header_t *);
- int netfs_io_server (mach_msg_header_t *, mach_msg_header_t *);
- int netfs_fsys_server (mach_msg_header_t *, mach_msg_header_t *);
-
- if (netfs_io_server (inp, outp)
- || netfs_fs_server (inp, outp)
- || ports_notify_server (inp, outp)
- || netfs_fsys_server (inp, outp)
+ mig_routine_t netfs_io_server_routine (mach_msg_header_t *);
+ mig_routine_t netfs_fs_server_routine (mach_msg_header_t *);
+ mig_routine_t ports_notify_server_routine (mach_msg_header_t *);
+ mig_routine_t netfs_fsys_server_routine (mach_msg_header_t *);
+ mig_routine_t ports_interrupt_server_routine (mach_msg_header_t *);
+
+ mig_routine_t routine;
+ if ((routine = netfs_io_server_routine (inp)) ||
+ (routine = netfs_fs_server_routine (inp)) ||
+ (routine = ports_notify_server_routine (inp)) ||
+ (routine = netfs_fsys_server_routine (inp)) ||
/* XXX we should intercept interrupt_operation and do
the ports_S_interrupt_operation work as well as
sending an interrupt_operation to the underlying file.
*/
- || ports_interrupt_server (inp, outp))
- return 1;
+ (routine = ports_interrupt_server_routine (inp)))
+ {
+ (*routine) (inp, outp);
+ return TRUE;
+ }
else
{
/* We didn't recognize the message ID, so pass the message through