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.
* libpager/demuxer.c (pager_demuxer): Improve the demuxer function. --- libpager/demuxer.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/libpager/demuxer.c b/libpager/demuxer.c index 79c0ddc..9a847fb 100644 --- a/libpager/demuxer.c +++ b/libpager/demuxer.c @@ -19,22 +19,25 @@ #include "memory_object_S.h" #include "notify_S.h" +#include "memory_object_S.h" +#include "notify_S.h" + /* Demultiplex a single message directed at a pager port; INP is the message received; fill OUTP with the reply. */ int pager_demuxer (mach_msg_header_t *inp, mach_msg_header_t *outp) { - extern int _pager_seqnos_memory_object_server (mach_msg_header_t *inp, - mach_msg_header_t *outp); - extern int _pager_seqnos_notify_server (mach_msg_header_t *inp, - mach_msg_header_t *outp); + mig_routine_t routine; + if ((routine = _pager_seqnos_memory_object_server_routine (inp)) || + (routine = _pager_seqnos_notify_server_routine (inp))) + { + (*routine) (inp, outp); + return TRUE; + } - int result = _pager_seqnos_memory_object_server (inp, outp) - || _pager_seqnos_notify_server (inp, outp); - if (!result) - /* Synchronize our bookkeeping of the port's seqno with the one consumed by - this bogus message. */ - _pager_update_seqno (inp->msgh_local_port, inp->msgh_seqno); - return result; + /* Synchronize our bookkeeping of the port's seqno with the one + consumed by this bogus message. */ + _pager_update_seqno (inp->msgh_local_port, inp->msgh_seqno); + return FALSE; } -- 1.8.5.2