* 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
This commit is contained in:
+19
-12
@@ -457,11 +457,14 @@ status_t
|
|||||||
BMessenger::SendMessage(BMessage *message, BMessage *reply,
|
BMessenger::SendMessage(BMessage *message, BMessage *reply,
|
||||||
bigtime_t deliveryTimeout, bigtime_t replyTimeout) const
|
bigtime_t deliveryTimeout, bigtime_t replyTimeout) const
|
||||||
{
|
{
|
||||||
status_t error = (message ? B_OK : B_BAD_VALUE);
|
status_t error = (message && reply ? B_OK : B_BAD_VALUE);
|
||||||
if (error) {
|
if (error == B_OK) {
|
||||||
error = message->send_message(fPort, fTeam, fHandlerToken,
|
error = message->send_message(fPort, fTeam, fHandlerToken,
|
||||||
fPreferredTarget, reply, deliveryTimeout,
|
fPreferredTarget, reply, deliveryTimeout,
|
||||||
replyTimeout);
|
replyTimeout);
|
||||||
|
// Map this error for now:
|
||||||
|
if (error == B_BAD_TEAM_ID)
|
||||||
|
error = B_BAD_PORT_ID;
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
@@ -484,6 +487,7 @@ BMessenger::operator=(const BMessenger &from)
|
|||||||
fTeam = from.fTeam;
|
fTeam = from.fTeam;
|
||||||
fPreferredTarget = from.fPreferredTarget;
|
fPreferredTarget = from.fPreferredTarget;
|
||||||
}
|
}
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==
|
// ==
|
||||||
@@ -497,9 +501,9 @@ BMessenger::operator=(const BMessenger &from)
|
|||||||
bool
|
bool
|
||||||
BMessenger::operator==(const BMessenger &other) const
|
BMessenger::operator==(const BMessenger &other) const
|
||||||
{
|
{
|
||||||
|
// Note: The fTeam fields are not compared.
|
||||||
return (fPort == other.fPort
|
return (fPort == other.fPort
|
||||||
&& fHandlerToken == other.fHandlerToken
|
&& fHandlerToken == other.fHandlerToken
|
||||||
&& fTeam == other.fTeam
|
|
||||||
&& fPreferredTarget == other.fPreferredTarget);
|
&& fPreferredTarget == other.fPreferredTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -585,8 +589,8 @@ BMessenger::InitData(const char *signature, team_id team, status_t *result)
|
|||||||
second one.
|
second one.
|
||||||
|
|
||||||
This method defines an order on BMessengers based on their member
|
This method defines an order on BMessengers based on their member
|
||||||
variables \c fPort, \c fHandlerToken, \c fTeam and \c fPreferredTarget.
|
variables \c fPort, \c fHandlerToken and \c fPreferredTarget.
|
||||||
s
|
|
||||||
\param a The first messenger.
|
\param a The first messenger.
|
||||||
\param b The second messenger.
|
\param b The second messenger.
|
||||||
\return \c true, if \a a is less than \a b, \c false otherwise.
|
\return \c true, if \a a is less than \a b, \c false otherwise.
|
||||||
@@ -594,14 +598,17 @@ s
|
|||||||
bool
|
bool
|
||||||
operator<(const BMessenger &a, const BMessenger &b)
|
operator<(const BMessenger &a, const BMessenger &b)
|
||||||
{
|
{
|
||||||
|
// significance:
|
||||||
|
// 1. fPort
|
||||||
|
// 2. fHandlerToken
|
||||||
|
// 3. fPreferredTarget
|
||||||
|
// fTeam is insignificant
|
||||||
return (a.fPort < b.fPort
|
return (a.fPort < b.fPort
|
||||||
|| (a.fPort == b.fPort
|
|| a.fPort == b.fPort
|
||||||
&& a.fHandlerToken < b.fHandlerToken
|
&& (a.fHandlerToken < b.fHandlerToken
|
||||||
|| (a.fHandlerToken == b.fHandlerToken
|
|| a.fHandlerToken == b.fHandlerToken
|
||||||
&& a.fTeam < b.fTeam
|
&& !a.fPreferredTarget
|
||||||
|| (a.fTeam == b.fTeam
|
&& b.fPreferredTarget));
|
||||||
&& a.fPreferredTarget == false
|
|
||||||
&& b.fPreferredTarget == true))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// !=
|
// !=
|
||||||
|
|||||||
Reference in New Issue
Block a user