From e09769a94c99f86740a654b5cc6973bb96893fff Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 17 Apr 2008 16:05:37 +0000 Subject: [PATCH] Added Dump() method. It prints some general info and a list of the message fields, no data, though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25001 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/util/KMessage.h | 2 ++ src/system/kernel/messaging/KMessage.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/headers/private/kernel/util/KMessage.h b/headers/private/kernel/util/KMessage.h index e4206ea7a3..8a84987a30 100644 --- a/headers/private/kernel/util/KMessage.h +++ b/headers/private/kernel/util/KMessage.h @@ -134,6 +134,8 @@ public: team_id senderTeam = -1); status_t ReceiveFrom(port_id fromPort, bigtime_t timeout = -1); + void Dump(void (*printFunc)(const char*,...)); + private: friend class KMessageField; friend class MessageAdapter; diff --git a/src/system/kernel/messaging/KMessage.cpp b/src/system/kernel/messaging/KMessage.cpp index dd838891c2..af1b94fdd7 100644 --- a/src/system/kernel/messaging/KMessage.cpp +++ b/src/system/kernel/messaging/KMessage.cpp @@ -585,6 +585,25 @@ KMessage::ReceiveFrom(port_id fromPort, bigtime_t timeout) #endif // !KMESSAGE_CONTAINER_ONLY +void +KMessage::Dump(void (*printFunc)(const char*,...)) +{ + Header* header = _Header(); + printFunc("KMessage: buffer: %p (size/capacity: %ld/%ld), flags: 0x0lx\n", + fBuffer, header->size, fBufferCapacity, fFlags); + + KMessageField field; + while (GetNextField(&field) == B_OK) { + type_code type = field.TypeCode(); + int32 count = field.CountElements(); + printFunc(" field: %-20s: type: 0x%lx ('%c%c%c%c'), %ld element%s\n", + field.Name(), type, (char)(type >> 24), (char)(type >> 16), + (char)(type >> 8), (char)type, count, count == 1 ? "" : "s"); + } + +} + + // _Header KMessage::Header * KMessage::_Header() const