Hide implementation of certain stream functions

This commit is contained in:
Armin Novak
2021-10-05 08:53:20 +02:00
committed by akallabeth
parent 33bc2ba2ab
commit 439ec62cff
2 changed files with 102 additions and 97 deletions

View File

@@ -51,8 +51,8 @@ extern "C"
typedef struct _wStream wStream;
static INLINE size_t Stream_Capacity(wStream* _s);
static INLINE size_t Stream_GetRemainingCapacity(wStream* _s);
static INLINE size_t Stream_GetRemainingLength(wStream* _s);
WINPR_API size_t Stream_GetRemainingCapacity(wStream* _s);
WINPR_API size_t Stream_GetRemainingLength(wStream* _s);
WINPR_API BOOL Stream_EnsureCapacity(wStream* s, size_t size);
WINPR_API BOOL Stream_EnsureRemainingCapacity(wStream* s, size_t size);
@@ -393,58 +393,7 @@ extern "C"
WINPR_API BOOL Stream_SetPosition(wStream* _s, size_t _p);
static INLINE void Stream_SealLength(wStream* _s)
{
size_t cur;
WINPR_ASSERT(_s);
WINPR_ASSERT(_s->buffer <= _s->pointer);
cur = (size_t)(_s->pointer - _s->buffer);
WINPR_ASSERT(cur <= _s->capacity);
if (cur <= _s->capacity)
_s->length = cur;
else
{
const char* wTAG = "com.freerdp.winpr.wStream";
WLog_FATAL(wTAG, "wStream API misuse: stream was written out of bounds");
winpr_log_backtrace(wTAG, WLOG_FATAL, 20);
_s->length = 0;
}
}
static INLINE size_t Stream_GetRemainingCapacity(wStream* _s)
{
size_t cur;
WINPR_ASSERT(_s);
WINPR_ASSERT(_s->buffer <= _s->pointer);
cur = (size_t)(_s->pointer - _s->buffer);
WINPR_ASSERT(cur <= _s->capacity);
if (cur > _s->capacity)
{
const char* wTAG = "com.freerdp.winpr.wStream";
WLog_FATAL(wTAG, "wStream API misuse: stream was written out of bounds");
winpr_log_backtrace(wTAG, WLOG_FATAL, 20);
return 0;
}
return (_s->capacity - cur);
}
static INLINE size_t Stream_GetRemainingLength(wStream* _s)
{
size_t cur;
WINPR_ASSERT(_s);
WINPR_ASSERT(_s->buffer <= _s->pointer);
WINPR_ASSERT(_s->length <= _s->capacity);
cur = (size_t)(_s->pointer - _s->buffer);
WINPR_ASSERT(cur <= _s->length);
if (cur > _s->length)
{
const char* wTAG = "com.freerdp.winpr.wStream";
WLog_FATAL(wTAG, "wStream API misuse: stream was read out of bounds");
winpr_log_backtrace(wTAG, WLOG_FATAL, 20);
return 0;
}
return (_s->length - cur);
}
WINPR_API void Stream_SealLength(wStream* _s);
static INLINE void Stream_Clear(wStream* _s)
{
@@ -461,39 +410,8 @@ extern "C"
return TRUE;
}
static INLINE BOOL Stream_Read_UTF16_String(wStream* s, WCHAR* dst, size_t length)
{
size_t x;
WINPR_ASSERT(s);
WINPR_ASSERT(dst);
if (Stream_GetRemainingLength(s) / sizeof(WCHAR) < length)
return FALSE;
for (x = 0; x < length; x++)
Stream_Read_UINT16(s, dst[x]);
return TRUE;
}
static INLINE BOOL Stream_Write_UTF16_String(wStream* s, const WCHAR* src, size_t length)
{
size_t x;
WINPR_ASSERT(s);
WINPR_ASSERT(src || (length == 0));
if (!s || !src)
return FALSE;
if (Stream_GetRemainingCapacity(s) / sizeof(WCHAR) < length)
return FALSE;
for (x = 0; x < length; x++)
Stream_Write_UINT16(s, src[x]);
return TRUE;
}
WINPR_API BOOL Stream_Read_UTF16_String(wStream* s, WCHAR* dst, size_t length);
WINPR_API BOOL Stream_Write_UTF16_String(wStream* s, const WCHAR* src, size_t length);
/* StreamPool */

View File

@@ -27,17 +27,20 @@
#include <winpr/stream.h>
#include "stream.h"
#include "../log.h"
#define STREAM_ASSERT(cond) \
do \
{ \
if (!(cond)) \
{ \
const char* tag = "com.freerdp.winpr.wStream"; \
WLog_FATAL(tag, "%s [%s:%s:%" PRIuz "]", #cond, __FILE__, __FUNCTION__, __LINE__); \
winpr_log_backtrace(tag, WLOG_FATAL, 20); \
abort(); \
} \
#define STREAM_TAG WINPR_TAG("wStream")
#define STREAM_ASSERT(cond) \
do \
{ \
if (!(cond)) \
{ \
WLog_FATAL(STREAM_TAG, "%s [%s:%s:%" PRIuz "]", #cond, __FILE__, __FUNCTION__, \
__LINE__); \
winpr_log_backtrace(STREAM_TAG, WLOG_FATAL, 20); \
abort(); \
} \
} while (0)
BOOL Stream_EnsureCapacity(wStream* s, size_t size)
@@ -189,6 +192,23 @@ BOOL Stream_SetPosition(wStream* _s, size_t _p)
return TRUE;
}
void Stream_SealLength(wStream* _s)
{
size_t cur;
WINPR_ASSERT(_s);
WINPR_ASSERT(_s->buffer <= _s->pointer);
cur = (size_t)(_s->pointer - _s->buffer);
WINPR_ASSERT(cur <= _s->capacity);
if (cur <= _s->capacity)
_s->length = cur;
else
{
WLog_FATAL(STREAM_TAG, "wStream API misuse: stream was written out of bounds");
winpr_log_backtrace(STREAM_TAG, WLOG_FATAL, 20);
_s->length = 0;
}
}
#if defined(WITH_WINPR_DEPRECATED)
BOOL Stream_SetPointer(wStream* _s, BYTE* _p)
{
@@ -219,3 +239,70 @@ void Stream_SetCapacity(wStream* _s, size_t _c)
}
#endif
size_t Stream_GetRemainingCapacity(wStream* _s)
{
size_t cur;
WINPR_ASSERT(_s);
WINPR_ASSERT(_s->buffer <= _s->pointer);
cur = (size_t)(_s->pointer - _s->buffer);
WINPR_ASSERT(cur <= _s->capacity);
if (cur > _s->capacity)
{
WLog_FATAL(STREAM_TAG, "wStream API misuse: stream was written out of bounds");
winpr_log_backtrace(STREAM_TAG, WLOG_FATAL, 20);
return 0;
}
return (_s->capacity - cur);
}
size_t Stream_GetRemainingLength(wStream* _s)
{
size_t cur;
WINPR_ASSERT(_s);
WINPR_ASSERT(_s->buffer <= _s->pointer);
WINPR_ASSERT(_s->length <= _s->capacity);
cur = (size_t)(_s->pointer - _s->buffer);
WINPR_ASSERT(cur <= _s->length);
if (cur > _s->length)
{
WLog_FATAL(STREAM_TAG, "wStream API misuse: stream was read out of bounds");
winpr_log_backtrace(STREAM_TAG, WLOG_FATAL, 20);
return 0;
}
return (_s->length - cur);
}
BOOL Stream_Write_UTF16_String(wStream* s, const WCHAR* src, size_t length)
{
size_t x;
WINPR_ASSERT(s);
WINPR_ASSERT(src || (length == 0));
if (!s || !src)
return FALSE;
if (Stream_GetRemainingCapacity(s) / sizeof(WCHAR) < length)
return FALSE;
for (x = 0; x < length; x++)
Stream_Write_UINT16(s, src[x]);
return TRUE;
}
BOOL Stream_Read_UTF16_String(wStream* s, WCHAR* dst, size_t length)
{
size_t x;
WINPR_ASSERT(s);
WINPR_ASSERT(dst);
if (Stream_GetRemainingLength(s) / sizeof(WCHAR) < length)
return FALSE;
for (x = 0; x < length; x++)
Stream_Read_UINT16(s, dst[x]);
return TRUE;
}