|
Packit Service |
310c69 |
/*
|
|
Packit Service |
310c69 |
* Copyright (c) 2020 Red Hat, Inc.
|
|
Packit Service |
310c69 |
*
|
|
Packit Service |
310c69 |
* This program is free software; you can redistribute it and/or
|
|
Packit Service |
310c69 |
* modify it under the terms of the GNU General Public License
|
|
Packit Service |
310c69 |
* as published by the Free Software Foundation; either version 2
|
|
Packit Service |
310c69 |
* of the License, or (at your option) any later version.
|
|
Packit Service |
310c69 |
*
|
|
Packit Service |
310c69 |
* This program is distributed in the hope that it will be useful,
|
|
Packit Service |
310c69 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
310c69 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit Service |
310c69 |
* GNU General Public License for more details.
|
|
Packit Service |
310c69 |
*
|
|
Packit Service |
310c69 |
* You should have received a copy of the GNU General Public License
|
|
Packit Service |
310c69 |
* along with this program; if not, write to the Free Software
|
|
Packit Service |
310c69 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
Packit Service |
310c69 |
* 02110-1301, USA.
|
|
Packit Service |
310c69 |
*
|
|
Packit Service |
310c69 |
* $Id: //eng/uds-releases/jasper/src/uds/buffer.c#3 $
|
|
Packit Service |
310c69 |
*/
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
#include "buffer.h"
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
#include "bufferPrivate.h"
|
|
Packit Service |
310c69 |
#include "logger.h"
|
|
Packit Service |
310c69 |
#include "memoryAlloc.h"
|
|
Packit Service |
310c69 |
#include "numeric.h"
|
|
Packit Service |
310c69 |
#include "permassert.h"
|
|
Packit Service |
310c69 |
#include "typeDefs.h"
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int wrapBuffer(byte *bytes,
|
|
Packit Service |
310c69 |
size_t length,
|
|
Packit Service |
310c69 |
size_t contentLength,
|
|
Packit Service |
310c69 |
Buffer **bufferPtr)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
int result = ASSERT((contentLength <= length),
|
|
Packit Service |
310c69 |
"content length, %zu, fits in buffer size, %zu",
|
|
Packit Service |
310c69 |
length, contentLength);
|
|
Packit Service |
310c69 |
Buffer *buffer;
|
|
Packit Service |
310c69 |
result = ALLOCATE(1, Buffer, "buffer", &buffer);
|
|
Packit Service |
310c69 |
if (result != UDS_SUCCESS) {
|
|
Packit Service |
310c69 |
return result;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
buffer->data = bytes;
|
|
Packit Service |
310c69 |
buffer->start = 0;
|
|
Packit Service |
310c69 |
buffer->end = contentLength;
|
|
Packit Service |
310c69 |
buffer->length = length;
|
|
Packit Service |
310c69 |
buffer->wrapped = true;
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
*bufferPtr = buffer;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/***********************************************************************/
|
|
Packit Service |
310c69 |
int makeBuffer(size_t size, Buffer **newBuffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
byte *data;
|
|
Packit Service |
310c69 |
int result = ALLOCATE(size, byte, "buffer data", &data);
|
|
Packit Service |
310c69 |
if (result != UDS_SUCCESS) {
|
|
Packit Service |
310c69 |
return result;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
Buffer *buffer;
|
|
Packit Service |
310c69 |
result = wrapBuffer(data, size, 0, &buffer);
|
|
Packit Service |
310c69 |
if (result != UDS_SUCCESS) {
|
|
Packit Service |
310c69 |
FREE(data);
|
|
Packit Service |
310c69 |
return result;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
buffer->wrapped = false;
|
|
Packit Service |
310c69 |
*newBuffer = buffer;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/***********************************************************************/
|
|
Packit Service |
310c69 |
void freeBuffer(Buffer **pBuffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
Buffer *buffer = *pBuffer;
|
|
Packit Service |
310c69 |
*pBuffer = NULL;
|
|
Packit Service |
310c69 |
if (buffer == NULL) {
|
|
Packit Service |
310c69 |
return;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
if (!buffer->wrapped) {
|
|
Packit Service |
310c69 |
FREE(buffer->data);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
FREE(buffer);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
size_t bufferLength(Buffer *buffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return buffer->length;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
size_t contentLength(Buffer *buffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return buffer->end - buffer->start;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
size_t uncompactedAmount(Buffer *buffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return buffer->start;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
size_t availableSpace(Buffer *buffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return buffer->length - buffer->end;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
size_t bufferUsed(Buffer *buffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return buffer->end;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/***********************************************************************/
|
|
Packit Service |
310c69 |
int growBuffer(Buffer *buffer, size_t length)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (buffer == NULL) {
|
|
Packit Service |
310c69 |
return logWarningWithStringError(UDS_INVALID_ARGUMENT,
|
|
Packit Service |
310c69 |
"cannot resize NULL buffer");
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
if (buffer->wrapped) {
|
|
Packit Service |
310c69 |
return logWarningWithStringError(UDS_INVALID_ARGUMENT,
|
|
Packit Service |
310c69 |
"cannot resize wrapped buffer");
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
if (buffer->end > length) {
|
|
Packit Service |
310c69 |
return logWarningWithStringError(UDS_INVALID_ARGUMENT,
|
|
Packit Service |
310c69 |
"cannot shrink buffer");
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
byte *data;
|
|
Packit Service |
310c69 |
int result = reallocateMemory(buffer->data, buffer->length, length,
|
|
Packit Service |
310c69 |
"buffer data", &data);
|
|
Packit Service |
310c69 |
if (result != UDS_SUCCESS) {
|
|
Packit Service |
310c69 |
return result;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
buffer->data = data;
|
|
Packit Service |
310c69 |
buffer->length = length;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/***********************************************************************/
|
|
Packit Service |
310c69 |
bool ensureAvailableSpace(Buffer *buffer, size_t bytes)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (availableSpace(buffer) >= bytes) {
|
|
Packit Service |
310c69 |
return true;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
compactBuffer(buffer);
|
|
Packit Service |
310c69 |
return (availableSpace(buffer) >= bytes);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/***********************************************************************/
|
|
Packit Service |
310c69 |
void clearBuffer(Buffer *buffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
buffer->start = 0;
|
|
Packit Service |
310c69 |
buffer->end = buffer->length;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/***********************************************************************/
|
|
Packit Service |
310c69 |
void compactBuffer(Buffer *buffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if ((buffer->start == 0) || (buffer->end == 0)) {
|
|
Packit Service |
310c69 |
return;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
size_t bytesToMove = buffer->end - buffer->start;
|
|
Packit Service |
310c69 |
memmove(buffer->data, buffer->data + buffer->start, bytesToMove);
|
|
Packit Service |
310c69 |
buffer->start = 0;
|
|
Packit Service |
310c69 |
buffer->end = bytesToMove;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int resetBufferEnd(Buffer *buffer, size_t end)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (end > buffer->length) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
buffer->end = end;
|
|
Packit Service |
310c69 |
if (buffer->start > buffer->end) {
|
|
Packit Service |
310c69 |
buffer->start = buffer->end;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int skipForward(Buffer *buffer, size_t bytesToSkip)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < bytesToSkip) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
buffer->start += bytesToSkip;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int rewindBuffer(Buffer *buffer, size_t bytesToRewind)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (buffer->start < bytesToRewind) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
buffer->start -= bytesToRewind;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
bool hasSameBytes(Buffer *buffer, const byte *data, size_t length)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return ((contentLength(buffer) >= length)
|
|
Packit Service |
310c69 |
&& (memcmp(buffer->data + buffer->start, data, length) == 0));
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
bool equalBuffers(Buffer *buffer1, Buffer *buffer2)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return hasSameBytes(buffer1, buffer2->data + buffer2->start,
|
|
Packit Service |
310c69 |
contentLength(buffer2));
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getByte(Buffer *buffer, byte *bytePtr)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < sizeof(byte)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
*bytePtr = buffer->data[buffer->start++];
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int peekByte(Buffer *buffer, size_t offset, byte *bytePtr)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < (offset + sizeof(byte))) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
*bytePtr = buffer->data[buffer->start + offset];
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putByte(Buffer *buffer, byte b)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(byte))) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
buffer->data[buffer->end++] = b;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getBytesFromBuffer(Buffer *buffer, size_t length, void *destination)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < length) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
memcpy(destination, buffer->data + buffer->start, length);
|
|
Packit Service |
310c69 |
buffer->start += length;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
byte *getBufferContents(Buffer *buffer)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return buffer->data + buffer->start;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int copyBytes(Buffer *buffer, size_t length, byte **destinationPtr)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
byte *destination;
|
|
Packit Service |
310c69 |
int result = ALLOCATE(length, byte, "copyBytes() buffer",
|
|
Packit Service |
310c69 |
&destination);
|
|
Packit Service |
310c69 |
if (result != UDS_SUCCESS) {
|
|
Packit Service |
310c69 |
return result;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
result = getBytesFromBuffer(buffer, length, destination);
|
|
Packit Service |
310c69 |
if (result != UDS_SUCCESS) {
|
|
Packit Service |
310c69 |
FREE(destination);
|
|
Packit Service |
310c69 |
} else {
|
|
Packit Service |
310c69 |
*destinationPtr = destination;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return result;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putBytes(Buffer *buffer, size_t length, const void *source)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, length)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
memcpy(buffer->data + buffer->end, source, length);
|
|
Packit Service |
310c69 |
buffer->end += length;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putBuffer(Buffer *target, Buffer *source, size_t length)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(source) < length) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
int result = putBytes(target, length, getBufferContents(source));
|
|
Packit Service |
310c69 |
if (result != UDS_SUCCESS) {
|
|
Packit Service |
310c69 |
return result;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
source->start += length;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int zeroBytes(Buffer *buffer, size_t length)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, length)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
memset(buffer->data + buffer->end, 0, length);
|
|
Packit Service |
310c69 |
buffer->end += length;
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getBoolean(Buffer *buffer, bool *b)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
byte by;
|
|
Packit Service |
310c69 |
int result = getByte(buffer, &by;;
|
|
Packit Service |
310c69 |
if (result == UDS_SUCCESS) {
|
|
Packit Service |
310c69 |
*b = (by == 1);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return result;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putBoolean(Buffer *buffer, bool b)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
return putByte(buffer, (byte) (b ? 1 : 0));
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt16BEFromBuffer(Buffer *buffer, uint16_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < sizeof(uint16_t)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
decodeUInt16BE(buffer->data, &buffer->start, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt16BEIntoBuffer(Buffer *buffer, uint16_t ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint16_t))) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
encodeUInt16BE(buffer->data, &buffer->end, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt32BEFromBuffer(Buffer *buffer, uint32_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < sizeof(uint32_t)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
decodeUInt32BE(buffer->data, &buffer->start, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt32BEIntoBuffer(Buffer *buffer, uint32_t ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint32_t))) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
encodeUInt32BE(buffer->data, &buffer->end, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt32BEsFromBuffer(Buffer *buffer, size_t count, uint32_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < (sizeof(uint32_t) * count)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
unsigned int i;
|
|
Packit Service |
310c69 |
for (i = 0; i < count; i++) {
|
|
Packit Service |
310c69 |
decodeUInt32BE(buffer->data, &buffer->start, ui + i);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt32BEsIntoBuffer(Buffer *buffer, size_t count, const uint32_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint32_t) * count)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
unsigned int i;
|
|
Packit Service |
310c69 |
for (i = 0; i < count; i++) {
|
|
Packit Service |
310c69 |
encodeUInt32BE(buffer->data, &buffer->end, ui[i]);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt64BEsFromBuffer(Buffer *buffer, size_t count, uint64_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < (sizeof(uint64_t) * count)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
unsigned int i;
|
|
Packit Service |
310c69 |
for (i = 0; i < count; i++) {
|
|
Packit Service |
310c69 |
decodeUInt64BE(buffer->data, &buffer->start, ui + i);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt64BEsIntoBuffer(Buffer *buffer, size_t count, const uint64_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint64_t) * count)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
unsigned int i;
|
|
Packit Service |
310c69 |
for (i = 0; i < count; i++) {
|
|
Packit Service |
310c69 |
encodeUInt64BE(buffer->data, &buffer->end, ui[i]);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt16LEFromBuffer(Buffer *buffer, uint16_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < sizeof(uint16_t)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
decodeUInt16LE(buffer->data, &buffer->start, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt16LEIntoBuffer(Buffer *buffer, uint16_t ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint16_t))) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
encodeUInt16LE(buffer->data, &buffer->end, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt16LEsFromBuffer(Buffer *buffer, size_t count, uint16_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < (sizeof(uint16_t) * count)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
unsigned int i;
|
|
Packit Service |
310c69 |
for (i = 0; i < count; i++) {
|
|
Packit Service |
310c69 |
decodeUInt16LE(buffer->data, &buffer->start, ui + i);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt16LEsIntoBuffer(Buffer *buffer, size_t count, const uint16_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint16_t) * count)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
unsigned int i;
|
|
Packit Service |
310c69 |
for (i = 0; i < count; i++) {
|
|
Packit Service |
310c69 |
encodeUInt16LE(buffer->data, &buffer->end, ui[i]);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getInt32LEFromBuffer(Buffer *buffer, int32_t *i)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < sizeof(int32_t)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
decodeInt32LE(buffer->data, &buffer->start, i);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt32LEFromBuffer(Buffer *buffer, uint32_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < sizeof(uint32_t)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
decodeUInt32LE(buffer->data, &buffer->start, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt32LEIntoBuffer(Buffer *buffer, uint32_t ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint32_t))) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
encodeUInt32LE(buffer->data, &buffer->end, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putInt64LEIntoBuffer(Buffer *buffer, int64_t i)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(int64_t))) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
encodeInt64LE(buffer->data, &buffer->end, i);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt64LEFromBuffer(Buffer *buffer, uint64_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < sizeof(uint64_t)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
decodeUInt64LE(buffer->data, &buffer->start, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt64LEIntoBuffer(Buffer *buffer, uint64_t ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint64_t))) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
encodeUInt64LE(buffer->data, &buffer->end, ui);
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int getUInt64LEsFromBuffer(Buffer *buffer, size_t count, uint64_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (contentLength(buffer) < (sizeof(uint64_t) * count)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
unsigned int i;
|
|
Packit Service |
310c69 |
for (i = 0; i < count; i++) {
|
|
Packit Service |
310c69 |
decodeUInt64LE(buffer->data, &buffer->start, ui + i);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
/**********************************************************************/
|
|
Packit Service |
310c69 |
int putUInt64LEsIntoBuffer(Buffer *buffer, size_t count, const uint64_t *ui)
|
|
Packit Service |
310c69 |
{
|
|
Packit Service |
310c69 |
if (!ensureAvailableSpace(buffer, sizeof(uint64_t) * count)) {
|
|
Packit Service |
310c69 |
return UDS_BUFFER_ERROR;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|
|
Packit Service |
310c69 |
unsigned int i;
|
|
Packit Service |
310c69 |
for (i = 0; i < count; i++) {
|
|
Packit Service |
310c69 |
encodeUInt64LE(buffer->data, &buffer->end, ui[i]);
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
return UDS_SUCCESS;
|
|
Packit Service |
310c69 |
}
|
|
Packit Service |
310c69 |
|