[haiku-development] Re: Problem with BMessage and SettingsMessage
- From: "Adrien Destugues" <pulkomandy@xxxxxxxxxxxxx>
- To: haiku-development@xxxxxxxxxxxxx
- Date: Fri, 16 Apr 2021 09:58:54 +0000
const void*
SettingsMessage::GetValue(const char* name, type_code type, ssize_t
numBytes, const void&
defaultValue)
This will not work, because what address are you going to return in
case of success? The idea of BMessage::FindData() is that you write
the outcome to a void* buffer, not create a new buffer.
That's not right, actually FindData
(
https://www.haiku-os.org/legacy-docs/bebook/BMessage.html#BMessage_FindData)
takes a pointer-to-pointer as a parameter, and on return, the pointed pointer
points directly inside the BMessage data
(don't you love C++ for allowing these crazy things?).
So, this would work, but you have to remember that your data is owned by the
BMessage, and if the BMessage
is deleted/goes out of scope, you are left with an invalid pointer.
Having said that, I find it difficult to understand what the value of
the GetValue() overloaded methods is, when there are BMessage::Get*()
methods that are also available.
If I remember this correctly, the idea of SettingsMessage is to add the
handling of "defaults/revert".
So, all calls to Set* will track if the settings are modified, and all calls to
Get* will return the
default value if nothing is present in the message being loaded.
Other than that, they behave the same as the existing methods in BMessage.
--
Adrien.
Other related posts: