haiku/src/servers/app/RAMLinkMsgReader.cpp
Axel Dörfler dd10337fd0 Renamed BAppServerLink to AppServerLink, BPortLink to PortLink, LinkMsgReader
to LinkReceiver, LinkMsgSender to LinkSender, and put everything into the
BPrivate namespace.
Made AppServerLink a cheap object - it will use the applications receiver/sender
and not create its own buffers.
Fixed broken communication stuff here and there (mostly Font.cpp).
Put the newly introduced set|get_system_colors() into the BPrivate namespace -
please don't introduce private functions into the public namespace!!!
Also fixed their broken communication use, as Darkwyrm obviously forgot about
it again: the sequence Flush(); GetNextMessage() without error checking is
purely wrong and can make the app hang and/or crash! :-)
Other minor cleanup.
The input_server used some test mode with the haiku build target which is
probably wrong.
Hopefully I did not forget anything this time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13128 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-14 21:28:56 +00:00

78 lines
1.2 KiB
C++

#include "RAMLinkMsgReader.h"
#include <malloc.h>
RAMLinkMsgReader::RAMLinkMsgReader(int8 *buffer)
: BPrivate::LinkReceiver(-1)
{
SetBuffer(buffer);
}
RAMLinkMsgReader::RAMLinkMsgReader(void)
: BPrivate::LinkReceiver(-1)
{
SetBuffer(NULL);
}
RAMLinkMsgReader::~RAMLinkMsgReader(void)
{
// Note that this class does NOT take responsibility for the buffer it reads from.
}
void
RAMLinkMsgReader::SetBuffer(int8 *buffer)
{
if (!buffer) {
fBuffer = NULL;
fAttachStart = NULL;
fPosition = NULL;
fAttachSize = 0;
fCode = B_ERROR;
return;
}
fBuffer = buffer;
fPosition = fBuffer + 4;
fCode = *((int32*)fBuffer);
fAttachSize = *((size_t *)fPosition);
fPosition += sizeof(size_t);
fAttachStart = fPosition;
}
int8 *
RAMLinkMsgReader::GetBuffer(void)
{
return fBuffer;
}
size_t
RAMLinkMsgReader::GetBufferSize(void)
{
return fAttachSize;
}
status_t
RAMLinkMsgReader::Read(void *data, ssize_t size)
{
if (!fBuffer || fAttachSize == 0)
return B_NO_INIT;
if (size < 1)
return B_BAD_VALUE;
if (fPosition + size > fAttachStart + fAttachSize) {
// read past end of buffer
return B_BAD_VALUE;
}
memcpy(data, fPosition, size);
fPosition += size;
return B_OK;
}