Blame source/uds/buffer.c

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