/**
 * @file       tlv.c
 * @brief      Simple TLV iterator
 * @author     Oleksandr Fadieiev (o.fadieiev@samsung.com)
 * @version    1.0
 * @date       Created April 12, 2017
 * @copyright  In Samsung Ukraine R&D Center (SURC) under a contract between
 * @par        LLC "Samsung Electronics Ukraine Company" (Kiev, Ukraine) and
 * @par        "Samsung Electronics Co", Ltd (Seoul, Republic of Korea)
 * @par        Copyright: (c) Samsung Electronics Co, Ltd 2017. All rights reserved.
 */
#include "tlv.h"
#include <stdlib.h>

uint16_t TlvLength(const TlvHeader *tlv) {
  // Fixed little-endian format.
  return (uint16_t)(tlv->length[1] << 8 | tlv->length[0]);
}

TlvHeader *TlvNext(const TlvHeader *current, const void *end) {
  size_t tvl_size = sizeof(TlvHeader) + TlvLength(current);

  if ((size_t)(end - (void *)current) < tvl_size) {
    return NULL;
  }

  return (TlvHeader *)((uint8_t *)current + tvl_size);
}
