From cf9543e3507ed4c4661f56add487372c8b79ce79 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Thu, 25 Feb 2016 20:13:56 +0100 Subject: [PATCH] Converted Stream defines to inline functions. Using inline functions allows compiler type checks --- winpr/include/winpr/stream.h | 343 +++++++++++++++++++++++------------ 1 file changed, 225 insertions(+), 118 deletions(-) diff --git a/winpr/include/winpr/stream.h b/winpr/include/winpr/stream.h index 2e9f89f27..a9abb78c5 100644 --- a/winpr/include/winpr/stream.h +++ b/winpr/include/winpr/stream.h @@ -50,35 +50,59 @@ WINPR_API BOOL Stream_EnsureRemainingCapacity(wStream* s, size_t size); WINPR_API wStream* Stream_New(BYTE* buffer, size_t size); WINPR_API void Stream_Free(wStream* s, BOOL bFreeBuffer); -#define _stream_read_n8(_t, _s, _v, _p) do { _v = \ - (_t)(*_s->pointer); \ - _s->pointer += _p; } while (0) +static INLINE void Stream_Seek(wStream* s, size_t _offset) +{ + struct _wStream* _s = (struct _wStream*)s; + _s->pointer += (_offset); +} -#define _stream_read_n16_le(_t, _s, _v, _p) do { _v = \ +static INLINE void Stream_Rewind(wStream* s, size_t _offset) +{ + struct _wStream* _s = (struct _wStream*)s; + _s->pointer -= (_offset); +} + +#define _stream_read_n8(_t, __s, _v, _p) do { \ + struct _wStream* _s = (struct _wStream*)__s; \ + _v = \ + (_t)(*_s->pointer); \ + if (_p) Stream_Seek(_s, sizeof(_t)); } while (0) + +#define _stream_read_n16_le(_t, __s, _v, _p) do { \ + struct _wStream* _s = (struct _wStream*)__s; \ + _v = \ (_t)(*_s->pointer) + \ (((_t)(*(_s->pointer + 1))) << 8); \ - if (_p) _s->pointer += 2; } while (0) + if (_p) Stream_Seek(_s, sizeof(_t)); } while (0) -#define _stream_read_n16_be(_t, _s, _v, _p) do { _v = \ +#define _stream_read_n16_be(_t, __s, _v, _p) do { \ + struct _wStream* _s = (struct _wStream*)__s; \ + _v = \ (((_t)(*_s->pointer)) << 8) + \ (_t)(*(_s->pointer + 1)); \ - if (_p) _s->pointer += 2; } while (0) + if (_p) Stream_Seek(_s, sizeof(_t)); } while (0) -#define _stream_read_n32_le(_t, _s, _v, _p) do { _v = \ +#define _stream_read_n32_le(_t, __s, _v, _p) do { \ + struct _wStream* _s = (struct _wStream*)__s; \ + _v = \ (_t)(*_s->pointer) + \ (((_t)(*(_s->pointer + 1))) << 8) + \ (((_t)(*(_s->pointer + 2))) << 16) + \ (((_t)(*(_s->pointer + 3))) << 24); \ - if (_p) _s->pointer += 4; } while (0) + if (_p) Stream_Seek(_s, sizeof(_t)); } while (0) -#define _stream_read_n32_be(_t, _s, _v, _p) do { _v = \ +#define _stream_read_n32_be(_t, __s, _v, _p) do { \ + struct _wStream* _s = (struct _wStream*)__s; \ + _v = \ (((_t)(*(_s->pointer))) << 24) + \ (((_t)(*(_s->pointer + 1))) << 16) + \ (((_t)(*(_s->pointer + 2))) << 8) + \ (((_t)(*(_s->pointer + 3)))); \ - if (_p) _s->pointer += 4; } while (0) + if (_p) Stream_Seek(_s, sizeof(_t)); } while (0) -#define _stream_read_n64_le(_t, _s, _v, _p) do { _v = \ +#define _stream_read_n64_le(_t, __s, _v, _p) do { \ + struct _wStream* _s = (struct _wStream*)__s; \ + _v = \ (_t)(*_s->pointer) + \ (((_t)(*(_s->pointer + 1))) << 8) + \ (((_t)(*(_s->pointer + 2))) << 16) + \ @@ -87,9 +111,11 @@ WINPR_API void Stream_Free(wStream* s, BOOL bFreeBuffer); (((_t)(*(_s->pointer + 5))) << 40) + \ (((_t)(*(_s->pointer + 6))) << 48) + \ (((_t)(*(_s->pointer + 7))) << 56); \ - if (_p) _s->pointer += 8; } while (0) + if (_p) Stream_Seek(_s, sizeof(_t)); } while (0) -#define _stream_read_n64_be(_t, _s, _v, _p) do { _v = \ +#define _stream_read_n64_be(_t, __s, _v, _p) do { \ + struct _wStream* _s = (struct _wStream*)__s; \ + _v = \ (((_t)(*(_s->pointer))) << 56) + \ (((_t)(*(_s->pointer + 1))) << 48) + \ (((_t)(*(_s->pointer + 2))) << 40) + \ @@ -98,102 +124,117 @@ WINPR_API void Stream_Free(wStream* s, BOOL bFreeBuffer); (((_t)(*(_s->pointer + 5))) << 16) + \ (((_t)(*(_s->pointer + 6))) << 8) + \ (((_t)(*(_s->pointer + 7)))); \ - if (_p) _s->pointer += 8; } while (0) + if (_p) Stream_Seek(_s, sizeof(_t)); } while (0) +#define Stream_Read_UINT8(_s, _v) _stream_read_n8(UINT8, _s, _v, TRUE) +#define Stream_Read_INT8(_s, _v) _stream_read_n8(INT8, _s, _v, TRUE) -#define Stream_Read_UINT8(_s, _v) _stream_read_n8(UINT8, _s, _v, 1) -#define Stream_Read_INT8(_s, _v) _stream_read_n8(INT8, _s, _v, 1) +#define Stream_Read_UINT16(_s, _v) _stream_read_n16_le(UINT16, _s, _v, TRUE) +#define Stream_Read_INT16(_s, _v) _stream_read_n16_le(INT16, _s, _v, TRUE) -#define Stream_Read_UINT16(_s, _v) _stream_read_n16_le(UINT16, _s, _v, 1) -#define Stream_Read_INT16(_s, _v) _stream_read_n16_le(INT16, _s, _v, 1) +#define Stream_Read_UINT16_BE(_s, _v) _stream_read_n16_be(UINT16, _s, _v, TRUE) +#define Stream_Read_INT16_BE(_s, _v) _stream_read_n16_be(INT16, _s, _v, TRUE) -#define Stream_Read_UINT16_BE(_s, _v) _stream_read_n16_be(UINT16, _s, _v, 1) -#define Stream_Read_INT16_BE(_s, _v) _stream_read_n16_be(INT16, _s, _v, 1) +#define Stream_Read_UINT32(_s, _v) _stream_read_n32_le(UINT32, _s, _v, TRUE) +#define Stream_Read_INT32(_s, _v) _stream_read_n32_le(INT32, _s, _v, TRUE) -#define Stream_Read_UINT32(_s, _v) _stream_read_n32_le(UINT32, _s, _v, 1) -#define Stream_Read_INT32(_s, _v) _stream_read_n32_le(INT32, _s, _v, 1) +#define Stream_Read_UINT32_BE(_s, _v) _stream_read_n32_be(UINT32, _s, _v, TRUE) +#define Stream_Read_INT32_BE(_s, _v) _stream_read_n32_be(INT32, _s, _v, TRUE) -#define Stream_Read_UINT32_BE(_s, _v) _stream_read_n32_be(UINT32, _s, _v, 1) -#define Stream_Read_INT32_BE(_s, _v) _stream_read_n32_be(INT32, _s, _v, 1) +#define Stream_Read_UINT64(_s, _v) _stream_read_n64_le(UINT64, _s, _v, TRUE) +#define Stream_Read_INT64(_s, _v) _stream_read_n64_le(INT64, _s, _v, TRUE) -#define Stream_Read_UINT64(_s, _v) _stream_read_n64_le(UINT64, _s, _v, 1) -#define Stream_Read_INT64(_s, _v) _stream_read_n64_le(INT64, _s, _v, 1) +#define Stream_Read_UINT64_BE(_s, _v) _stream_read_n64_be(UINT64, _s, _v, TRUE) +#define Stream_Read_INT64_BE(_s, _v) _stream_read_n64_be(INT64, _s, _v, TRUE) -#define Stream_Read_UINT64_BE(_s, _v) _stream_read_n64_be(UINT64, _s, _v, 1) -#define Stream_Read_INT64_BE(_s, _v) _stream_read_n64_be(INT64, _s, _v, 1) +static INLINE void Stream_Read(wStream* s, void* _b, size_t _n) +{ + struct _wStream* _s = (struct _wStream*)s; + memcpy(_b, (_s->pointer), (_n)); + Stream_Seek(_s, _n); +} -#define Stream_Read(_s, _b, _n) do { \ - memcpy(_b, (_s->pointer), (_n)); \ - _s->pointer += (_n); \ - } while (0) +#define Stream_Peek_UINT8(_s, _v) _stream_read_n8(UINT8, _s, _v, FALSE) +#define Stream_Peek_INT8(_s, _v) _stream_read_n8(INT8, _s, _v, FALSE) +#define Stream_Peek_UINT16(_s, _v) _stream_read_n16_le(UINT16, _s, _v, FALSE) +#define Stream_Peek_INT16(_s, _v) _stream_read_n16_le(INT16, _s, _v, FALSE) -#define Stream_Peek_UINT8(_s, _v) _stream_read_n8(UINT8, _s, _v, 0) -#define Stream_Peek_INT8(_s, _v) _stream_read_n8(INT8, _s, _v, 0) +#define Stream_Peek_UINT16_BE(_s, _v) _stream_read_n16_be(UINT16, _s, _v, FALSE) +#define Stream_Peek_INT16_BE(_s, _v) _stream_read_n16_be(INT16, _s, _v, FALSE) -#define Stream_Peek_UINT16(_s, _v) _stream_read_n16_le(UINT16, _s, _v, 0) -#define Stream_Peek_INT16(_s, _v) _stream_read_n16_le(INT16, _s, _v, 0) +#define Stream_Peek_UINT32(_s, _v) _stream_read_n32_le(UINT32, _s, _v, FALSE) +#define Stream_Peek_INT32(_s, _v) _stream_read_n32_le(INT32, _s, _v, FALSE) -#define Stream_Peek_UINT16_BE(_s, _v) _stream_read_n16_be(UINT16, _s, _v, 0) -#define Stream_Peek_INT16_BE(_s, _v) _stream_read_n16_be(INT16, _s, _v, 0) +#define Stream_Peek_UINT32_BE(_s, _v) _stream_read_n32_be(UINT32, _s, _v, FALSE) +#define Stream_Peek_INT32_BE(_s, _v) _stream_read_n32_be(INT32, _s, _v, FALSE) -#define Stream_Peek_UINT32(_s, _v) _stream_read_n32_le(UINT32, _s, _v, 0) -#define Stream_Peek_INT32(_s, _v) _stream_read_n32_le(INT32, _s, _v, 0) +#define Stream_Peek_UINT64(_s, _v) _stream_read_n64_le(UINT64, _s, _v, FALSE) +#define Stream_Peek_INT64(_s, _v) _stream_read_n64_le(INT64, _s, _v, FALSE) -#define Stream_Peek_UINT32_BE(_s, _v) _stream_read_n32_be(UINT32, _s, _v, 0) -#define Stream_Peek_INT32_BE(_s, _v) _stream_read_n32_be(INT32, _s, _v, 0) +#define Stream_Peek_UINT64_BE(_s, _v) _stream_read_n64_be(UINT64, _s, _v, FALSE) +#define Stream_Peek_INT64_BE(_s, _v) _stream_read_n64_be(INT64, _s, _v, FALSE) -#define Stream_Peek_UINT64(_s, _v) _stream_read_n64_le(UINT64, _s, _v, 0) -#define Stream_Peek_INT64(_s, _v) _stream_read_n64_le(INT64, _s, _v, 0) +static INLINE void Stream_Peek(wStream* s, void* _b, size_t _n) +{ + struct _wStream* _s = (struct _wStream*)s; + memcpy(_b, (_s->pointer), (_n)); +} -#define Stream_Peek_UINT64_BE(_s, _v) _stream_read_n64_be(UINT64, _s, _v, 0) -#define Stream_Peek_INT64_BE(_s, _v) _stream_read_n64_be(INT64, _s, _v, 0) +static INLINE void Stream_Write_UINT8(wStream* s, UINT8 _v) +{ + struct _wStream* _s = (struct _wStream*)s; + *_s->pointer++ = (UINT8)(_v); +} -#define Stream_Peek(_s, _b, _n) do { \ - memcpy(_b, (_s->pointer), (_n)); \ - } while (0) +static INLINE void Stream_Write_UINT16(wStream* s, UINT16 _v) +{ + struct _wStream* _s = (struct _wStream*)s; + *_s->pointer++ = (_v) & 0xFF; + *_s->pointer++ = ((_v) >> 8) & 0xFF; +} +static INLINE void Stream_Write_UINT16_BE(wStream* s, UINT16 _v) +{ + struct _wStream* _s = (struct _wStream*)s; + *_s->pointer++ = ((_v) >> 8) & 0xFF; + *_s->pointer++ = (_v) & 0xFF; +} -#define Stream_Write_UINT8(_s, _v) do { \ - *_s->pointer++ = (UINT8)(_v); } while (0) +static INLINE void Stream_Write_UINT32(wStream* s, UINT32 _v) +{ + struct _wStream* _s = (struct _wStream*)s; + *_s->pointer++ = (_v) & 0xFF; + *_s->pointer++ = ((_v) >> 8) & 0xFF; + *_s->pointer++ = ((_v) >> 16) & 0xFF; + *_s->pointer++ = ((_v) >> 24) & 0xFF; +} -#define Stream_Write_UINT16(_s, _v) do { \ - *_s->pointer++ = (_v) & 0xFF; \ - *_s->pointer++ = ((_v) >> 8) & 0xFF; } while (0) +static INLINE void Stream_Write_UINT32_BE(wStream* s, UINT32 _v) +{ + struct _wStream* _s = (struct _wStream*)s; + Stream_Write_UINT16_BE(_s, ((_v) >> 16 & 0xFFFF)); + Stream_Write_UINT16_BE(_s, ((_v) & 0xFFFF)); +} -#define Stream_Write_UINT16_BE(_s, _v) do { \ - *_s->pointer++ = ((_v) >> 8) & 0xFF; \ - *_s->pointer++ = (_v) & 0xFF; } while (0) - -#define Stream_Write_UINT32(_s, _v) do { \ - *_s->pointer++ = (_v) & 0xFF; \ - *_s->pointer++ = ((_v) >> 8) & 0xFF; \ - *_s->pointer++ = ((_v) >> 16) & 0xFF; \ - *_s->pointer++ = ((_v) >> 24) & 0xFF; } while (0) - -#define Stream_Write_UINT32_BE(_s, _v) do { \ - Stream_Write_UINT16_BE(_s, ((_v) >> 16 & 0xFFFF)); \ - Stream_Write_UINT16_BE(_s, ((_v) & 0xFFFF)); \ - } while (0) - -#define Stream_Write_UINT64(_s, _v) do { \ - *_s->pointer++ = (UINT64)(_v) & 0xFF; \ - *_s->pointer++ = ((UINT64)(_v) >> 8) & 0xFF; \ - *_s->pointer++ = ((UINT64)(_v) >> 16) & 0xFF; \ - *_s->pointer++ = ((UINT64)(_v) >> 24) & 0xFF; \ - *_s->pointer++ = ((UINT64)(_v) >> 32) & 0xFF; \ - *_s->pointer++ = ((UINT64)(_v) >> 40) & 0xFF; \ - *_s->pointer++ = ((UINT64)(_v) >> 48) & 0xFF; \ - *_s->pointer++ = ((UINT64)(_v) >> 56) & 0xFF; } while (0) - -#define Stream_Write(_s, _b, _n) do { \ - memcpy(_s->pointer, (_b), (_n)); \ - _s->pointer += (_n); \ - } while (0) - - -#define Stream_Seek(_s,_offset) _s->pointer += (_offset) -#define Stream_Rewind(_s,_offset) _s->pointer -= (_offset) +static INLINE void Stream_Write_UINT64(wStream* s, UINT64 _v) +{ + struct _wStream* _s = (struct _wStream*)s; + *_s->pointer++ = (UINT64)(_v) & 0xFF; + *_s->pointer++ = ((UINT64)(_v) >> 8) & 0xFF; + *_s->pointer++ = ((UINT64)(_v) >> 16) & 0xFF; + *_s->pointer++ = ((UINT64)(_v) >> 24) & 0xFF; + *_s->pointer++ = ((UINT64)(_v) >> 32) & 0xFF; + *_s->pointer++ = ((UINT64)(_v) >> 40) & 0xFF; + *_s->pointer++ = ((UINT64)(_v) >> 48) & 0xFF; + *_s->pointer++ = ((UINT64)(_v) >> 56) & 0xFF; +} +static INLINE void Stream_Write(wStream* s, void* _b, size_t _n) +{ + struct _wStream* _s = (struct _wStream*)s; + memcpy(_s->pointer, (_b), (_n)); + Stream_Seek(_s, _n); +} #define Stream_Seek_UINT8(_s) Stream_Seek(_s, 1) #define Stream_Seek_UINT16(_s) Stream_Seek(_s, 2) @@ -205,45 +246,111 @@ WINPR_API void Stream_Free(wStream* s, BOOL bFreeBuffer); #define Stream_Rewind_UINT32(_s) Stream_Rewind(_s, 4) #define Stream_Rewind_UINT64(_s) Stream_Rewind(_s, 8) -#define Stream_Zero(_s, _n) do { \ - memset(_s->pointer, '\0', (_n)); \ - _s->pointer += (_n); \ - } while (0) +static INLINE void Stream_Zero(wStream* s, size_t _n) +{ + struct _wStream* _s = (struct _wStream*)s; + memset(_s->pointer, '\0', (_n)); + Stream_Seek(_s, _n); +} -#define Stream_Fill(_s, _v, _n) do { \ - memset(_s->pointer, _v, (_n)); \ - _s->pointer += (_n); \ - } while (0) +static INLINE void Stream_Fill(wStream* s, int _v, size_t _n) +{ + struct _wStream* _s = (struct _wStream*)s; + memset(_s->pointer, _v, (_n)); + Stream_Seek(_s, _n); +} -#define Stream_Copy(_dst, _src, _n) do { \ - memcpy(_dst->pointer, _src->pointer, _n); \ - _dst->pointer += _n; \ - _src->pointer += _n; \ - } while (0) +static INLINE void Stream_Copy(wStream* dst, wStream* src, size_t _n) +{ + struct _wStream* _src = (struct _wStream*)src; + struct _wStream* _dst = (struct _wStream*)dst; -#define Stream_Buffer(_s) _s->buffer -#define Stream_GetBuffer(_s, _b) _b = _s->buffer -#define Stream_SetBuffer(_s, _b) _s->buffer = _b + memcpy(_dst->pointer, _src->pointer, _n); + Stream_Seek(_dst, _n); + Stream_Seek(_src, _n); +} -#define Stream_Pointer(_s) _s->pointer -#define Stream_GetPointer(_s, _p) _p = _s->pointer -#define Stream_SetPointer(_s, _p) _s->pointer = _p +static INLINE BYTE* Stream_Buffer(wStream* s) +{ + struct _wStream* _s = (struct _wStream*)s; + return _s->buffer; +} -#define Stream_Length(_s) _s->length -#define Stream_GetLength(_s, _l) _l = _s->length -#define Stream_SetLength(_s, _l) _s->length = _l +#define Stream_GetBuffer(_s, _b) _b = Stream_Buffer(_s) +static INLINE void Stream_SetBuffer(wStream* s, BYTE* _b) +{ + struct _wStream* _s = (struct _wStream*)s; + _s->buffer = _b; +} -#define Stream_Capacity(_s) _s->capacity -#define Stream_GetCapacity(_s, _c) _c = _s->capacity -#define Stream_SetCapacity(_s, _c) _s->capacity = _c +static INLINE BYTE* Stream_Pointer(wStream* s) +{ + struct _wStream* _s = (struct _wStream*)s; + return _s->pointer; +} -#define Stream_GetPosition(_s) (_s->pointer - _s->buffer) -#define Stream_SetPosition(_s, _p) _s->pointer = _s->buffer + (_p) +#define Stream_GetPointer(_s, _p) _p = Stream_Pointer(_s) +static INLINE void Stream_SetPointer(wStream* s, BYTE* _p) +{ + struct _wStream* _s = (struct _wStream*)s; + _s->pointer = _p; +} -#define Stream_SealLength(_s) _s->length = (_s->pointer - _s->buffer) -#define Stream_GetRemainingLength(_s) (_s->length - (_s->pointer - _s->buffer)) +static INLINE size_t Stream_Length(wStream* s) +{ + struct _wStream* _s = (struct _wStream*)s; + return _s->length; +} -#define Stream_Clear(_s) memset(_s->buffer, 0, _s->capacity) +#define Stream_GetLength(_s, _l) _l = Stream_Length(_s) +static INLINE void Stream_SetLength(wStream* s, size_t _l) +{ + struct _wStream* _s = (struct _wStream*)s; + _s->length = _l; +} + +static INLINE size_t Stream_Capacity(wStream* s) +{ + struct _wStream* _s = (struct _wStream*)s; + return _s->capacity; +} + +#define Stream_GetCapacity(_s, _c) _c = Stream_Capacity(_s); +static INLINE void Stream_SetCapacity(wStream* s, size_t _c) +{ + struct _wStream* _s = (struct _wStream*)s; + _s->capacity = _c; +} + +static INLINE size_t Stream_GetPosition(wStream* s) +{ + struct _wStream* _s = (struct _wStream*)s; + return (_s->pointer - _s->buffer); +} + +static INLINE void Stream_SetPosition(wStream* s, size_t _p) +{ + struct _wStream* _s = (struct _wStream*)s; + _s->pointer = _s->buffer + (_p); +} + +static INLINE void Stream_SealLength(wStream* s) +{ + struct _wStream* _s = (struct _wStream*)s; + _s->length = (_s->pointer - _s->buffer); +} + +static INLINE size_t Stream_GetRemainingLength(wStream* s) +{ + struct _wStream* _s = (struct _wStream*)s; + return (_s->length - (_s->pointer - _s->buffer)); +} + +static INLINE void Stream_Clear(wStream* s) +{ + struct _wStream* _s = (struct _wStream*)s; + memset(_s->buffer, 0, _s->capacity); +} static INLINE BOOL Stream_SafeSeek(wStream* s, size_t size) { if (Stream_GetRemainingLength(s) < size)