From 8f1dc17d916f51649bddad1c4bdc1c8b531fbeb5 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 21 Jul 2002 00:55:55 +0000 Subject: [PATCH] * Assignment operator didn't return *this. * Fixed comparisson operators: The team ID is ignored. * Fixed second synchronous SendMessage(). The reply argument is checked for NULL now, `if (error)' -> `if (error == B_OK)', and map B_BAD_TEAM_ID to B_BAD_PORT_ID, which is what the R5 implementation returns. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@360 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/app/Messenger.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/kits/app/Messenger.cpp b/src/kits/app/Messenger.cpp index 1709405411..255be3c642 100644 --- a/src/kits/app/Messenger.cpp +++ b/src/kits/app/Messenger.cpp @@ -457,11 +457,14 @@ status_t BMessenger::SendMessage(BMessage *message, BMessage *reply, bigtime_t deliveryTimeout, bigtime_t replyTimeout) const { - status_t error = (message ? B_OK : B_BAD_VALUE); - if (error) { + status_t error = (message && reply ? B_OK : B_BAD_VALUE); + if (error == B_OK) { error = message->send_message(fPort, fTeam, fHandlerToken, fPreferredTarget, reply, deliveryTimeout, replyTimeout); + // Map this error for now: + if (error == B_BAD_TEAM_ID) + error = B_BAD_PORT_ID; } return error; } @@ -484,6 +487,7 @@ BMessenger::operator=(const BMessenger &from) fTeam = from.fTeam; fPreferredTarget = from.fPreferredTarget; } + return *this; } // == @@ -497,9 +501,9 @@ BMessenger::operator=(const BMessenger &from) bool BMessenger::operator==(const BMessenger &other) const { + // Note: The fTeam fields are not compared. return (fPort == other.fPort && fHandlerToken == other.fHandlerToken - && fTeam == other.fTeam && fPreferredTarget == other.fPreferredTarget); } @@ -585,8 +589,8 @@ BMessenger::InitData(const char *signature, team_id team, status_t *result) second one. This method defines an order on BMessengers based on their member - variables \c fPort, \c fHandlerToken, \c fTeam and \c fPreferredTarget. -s + variables \c fPort, \c fHandlerToken and \c fPreferredTarget. + \param a The first messenger. \param b The second messenger. \return \c true, if \a a is less than \a b, \c false otherwise. @@ -594,14 +598,17 @@ s bool operator<(const BMessenger &a, const BMessenger &b) { + // significance: + // 1. fPort + // 2. fHandlerToken + // 3. fPreferredTarget + // fTeam is insignificant return (a.fPort < b.fPort - || (a.fPort == b.fPort - && a.fHandlerToken < b.fHandlerToken - || (a.fHandlerToken == b.fHandlerToken - && a.fTeam < b.fTeam - || (a.fTeam == b.fTeam - && a.fPreferredTarget == false - && b.fPreferredTarget == true)))); + || a.fPort == b.fPort + && (a.fHandlerToken < b.fHandlerToken + || a.fHandlerToken == b.fHandlerToken + && !a.fPreferredTarget + && b.fPreferredTarget)); } // !=