* Added BString version of LinkReceiver::ReadString().
* adopted this method for ServerLink as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14750 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -17,8 +17,8 @@ namespace BPrivate {
|
|||||||
|
|
||||||
class AppServerLink : public ServerLink {
|
class AppServerLink : public ServerLink {
|
||||||
public:
|
public:
|
||||||
AppServerLink(void);
|
AppServerLink();
|
||||||
~AppServerLink(void);
|
~AppServerLink();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace BPrivate
|
} // namespace BPrivate
|
||||||
|
|||||||
@@ -5,12 +5,16 @@
|
|||||||
* Authors:
|
* Authors:
|
||||||
* DarkWyrm <[email protected]>
|
* DarkWyrm <[email protected]>
|
||||||
* Pahtz <[email protected]>
|
* Pahtz <[email protected]>
|
||||||
|
* Axel Dörfler, [email protected]
|
||||||
*/
|
*/
|
||||||
#ifndef _LINK_RECEIVER_H
|
#ifndef _LINK_RECEIVER_H
|
||||||
#define _LINK_RECEIVER_H
|
#define _LINK_RECEIVER_H
|
||||||
|
|
||||||
|
|
||||||
#include <OS.h>
|
#include <OS.h>
|
||||||
|
|
||||||
|
class BString;
|
||||||
|
|
||||||
|
|
||||||
namespace BPrivate {
|
namespace BPrivate {
|
||||||
|
|
||||||
@@ -28,6 +32,7 @@ class LinkReceiver {
|
|||||||
|
|
||||||
virtual status_t Read(void *data, ssize_t size);
|
virtual status_t Read(void *data, ssize_t size);
|
||||||
status_t ReadString(char **string);
|
status_t ReadString(char **string);
|
||||||
|
status_t ReadString(BString& string);
|
||||||
status_t ReadString(char *buffer, size_t bufferSize);
|
status_t ReadString(char *buffer, size_t bufferSize);
|
||||||
template <class Type> status_t Read(Type *data)
|
template <class Type> status_t Read(Type *data)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
#include <LinkReceiver.h>
|
#include <LinkReceiver.h>
|
||||||
#include <LinkSender.h>
|
#include <LinkSender.h>
|
||||||
|
|
||||||
|
class BString;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Error checking rules: (for if you don't want to check every return code)
|
* Error checking rules: (for if you don't want to check every return code)
|
||||||
@@ -58,6 +60,7 @@ class ServerLink {
|
|||||||
bool NeedsReply() const;
|
bool NeedsReply() const;
|
||||||
status_t Read(void *data, ssize_t size);
|
status_t Read(void *data, ssize_t size);
|
||||||
status_t ReadString(char *buffer, size_t bufferSize);
|
status_t ReadString(char *buffer, size_t bufferSize);
|
||||||
|
status_t ReadString(BString& string);
|
||||||
status_t ReadString(char **string);
|
status_t ReadString(char **string);
|
||||||
status_t ReadRegion(BRegion *region);
|
status_t ReadRegion(BRegion *region);
|
||||||
status_t ReadShape(BShape *shape);
|
status_t ReadShape(BShape *shape);
|
||||||
@@ -169,6 +172,12 @@ ServerLink::ReadString(char *buffer, size_t bufferSize)
|
|||||||
return fReceiver->ReadString(buffer, bufferSize);
|
return fReceiver->ReadString(buffer, bufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline status_t
|
||||||
|
ServerLink::ReadString(BString& string)
|
||||||
|
{
|
||||||
|
return fReceiver->ReadString(string);
|
||||||
|
}
|
||||||
|
|
||||||
inline status_t
|
inline status_t
|
||||||
ServerLink::ReadString(char **string)
|
ServerLink::ReadString(char **string)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include <ServerProtocol.h>
|
#include <ServerProtocol.h>
|
||||||
#include <LinkReceiver.h>
|
#include <LinkReceiver.h>
|
||||||
|
#include <String.h>
|
||||||
|
|
||||||
#include "link_message.h"
|
#include "link_message.h"
|
||||||
|
|
||||||
@@ -296,6 +297,49 @@ LinkReceiver::ReadString(char **_string)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
LinkReceiver::ReadString(BString &string)
|
||||||
|
{
|
||||||
|
int32 length = 0;
|
||||||
|
status_t status;
|
||||||
|
|
||||||
|
status = Read<int32>(&length);
|
||||||
|
if (status < B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
if (length < 0) {
|
||||||
|
status = B_ERROR;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (length > 0) {
|
||||||
|
char* buffer = string.LockBuffer(length + 1);
|
||||||
|
if (buffer == NULL) {
|
||||||
|
status = B_NO_MEMORY;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = Read(buffer, length);
|
||||||
|
if (status < B_OK) {
|
||||||
|
string.UnlockBuffer();
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the string is null terminated
|
||||||
|
buffer[length] = '\0';
|
||||||
|
string.UnlockBuffer(length);
|
||||||
|
} else
|
||||||
|
string = "";
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
|
||||||
|
err:
|
||||||
|
fRecvPosition -= sizeof(int32);
|
||||||
|
// rewind the transaction
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
LinkReceiver::ReadString(char *buffer, size_t bufferLength)
|
LinkReceiver::ReadString(char *buffer, size_t bufferLength)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user