dd10337fd0
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
78 lines
1.2 KiB
C++
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;
|
|
}
|