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.
* eth-filter/filter.c (filter_demuxer): Improve the demuxer function. Also, move it below the ethernet_demuxer function to avoid the need for a forward declaration. Prioritize the ethernet_demuxer. --- eth-filter/filter.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/eth-filter/filter.c b/eth-filter/filter.c index 7a25c10..482b080 100644 --- a/eth-filter/filter.c +++ b/eth-filter/filter.c @@ -194,17 +194,6 @@ clean_proxy_device (void *p) device->proxy->device = NULL; } -static int -filter_demuxer (mach_msg_header_t *inp, - mach_msg_header_t *outp) -{ - extern int device_server (mach_msg_header_t *, mach_msg_header_t *); - extern int notify_server (mach_msg_header_t *, mach_msg_header_t *); - extern int ethernet_demuxer (mach_msg_header_t *, mach_msg_header_t *); - return device_server (inp, outp) || notify_server (inp, outp) - || ethernet_demuxer (inp, outp) || trivfs_demuxer (inp, outp); -} - int ethernet_demuxer (mach_msg_header_t *inp, mach_msg_header_t *outp) @@ -233,6 +222,24 @@ ethernet_demuxer (mach_msg_header_t *inp, return 1; } +static int +filter_demuxer (mach_msg_header_t *inp, + mach_msg_header_t *outp) +{ + mig_routine_t routine; + if ((routine = NULL, ethernet_demuxer (inp, outp)) || + (routine = device_server_routine (inp)) || + (routine = notify_server_routine (inp)) || + (routine = NULL, trivfs_demuxer (inp, outp))) + { + if (routine) + (*routine) (inp, outp); + return TRUE; + } + else + return FALSE; +} + /* Implementation of notify interface */ kern_return_t do_mach_notify_port_deleted (struct port_info *pi, -- 1.9.1