From e3f3c0d12eb83af50f984332a8ddae6f27197b12 Mon Sep 17 00:00:00 2001 From: rimio Date: Mon, 5 Mar 2018 23:32:48 +0200 Subject: Change dir structure to accomodate multiple tools --- src/libecbor/ecbor_internal.h | 138 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 src/libecbor/ecbor_internal.h (limited to 'src/libecbor/ecbor_internal.h') diff --git a/src/libecbor/ecbor_internal.h b/src/libecbor/ecbor_internal.h new file mode 100644 index 0000000..9612c1a --- /dev/null +++ b/src/libecbor/ecbor_internal.h @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2018 Vasile Vilvoiu + * + * libecbor is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See LICENSE for details. + */ + +#ifndef _ECBOR_INTERNAL_H_ +#define _ECBOR_INTERNAL_H_ + +#include +#include + +/* Don't rely on for this */ +#define false 0 +#define true 1 + +/* CBOR major type 7 must not be exposed to user, but translated to other types */ +enum { + ECBOR_TYPE_SPECIAL = 7 +}; + +/* Additional value meanings */ +enum { + ECBOR_ADDITIONAL_LAST_INTEGER = 23, + + ECBOR_ADDITIONAL_1BYTE = 24, + ECBOR_ADDITIONAL_2BYTE = 25, + ECBOR_ADDITIONAL_4BYTE = 26, + ECBOR_ADDITIONAL_8BYTE = 27, + + ECBOR_ADDITIONAL_INDEFINITE = 31 +}; + +/* Simple value meanings */ +enum { + ECBOR_SIMPLE_FALSE = 20, + ECBOR_SIMPLE_TRUE = 21, + ECBOR_SIMPLE_NULL = 22, + ECBOR_SIMPLE_UNDEFINED = 23 +}; + +/* Static item, for various initializations */ +static ecbor_item_t null_item = { + .type = ECBOR_TYPE_NONE, + .value = { + .tag = { + .tag_value = 0, + .child = NULL + } + }, + .size = 0, + .length = 0, + .is_indefinite = 0, + .parent = NULL, + .child = NULL, + .next = NULL, + .index = 0 +}; + +/* Internal checks. Most of these macros rely on the function returning an + error code, and a 'rc' value being declared locally */ +#define ECBOR_INTERNAL_CHECK_CONTEXT_PTR(c) \ + { \ + if (!(c)) { \ + return ECBOR_ERR_NULL_CONTEXT; \ + } \ + } +#define ECBOR_INTERNAL_CHECK_ITEM_PTR(i) \ + { \ + if (!(i)) { \ + return ECBOR_ERR_NULL_ITEM; \ + } \ + } + +#define ECBOR_INTERNAL_CHECK_VALUE_PTR(v) \ + { \ + if (!(v)) { \ + return ECBOR_ERR_NULL_VALUE; \ + } \ + } + +#define ECBOR_INTERNAL_CHECK_TYPE(t1, ref) \ + { \ + if ((t1) != (ref)) { \ + return ECBOR_ERR_INVALID_TYPE; \ + } \ + } + +#define ECBOR_INTERNAL_CHECK_BOUNDS(index, limit) \ + { \ + if ((index) >= (limit)) { \ + return ECBOR_ERR_INDEX_OUT_OF_BOUNDS; \ + } \ + } + +/* + * Endianness + */ +extern uint16_t +ecbor_uint16_from_big_endian (uint16_t value); + +extern uint32_t +ecbor_uint32_from_big_endian (uint32_t value); + +extern uint64_t +ecbor_uint64_from_big_endian (uint64_t value); + +extern float +ecbor_fp32_from_big_endian (float value); + +extern double +ecbor_fp64_from_big_endian (double value); + + +extern uint16_t +ecbor_uint16_to_big_endian (uint16_t value); + +extern uint32_t +ecbor_uint32_to_big_endian (uint32_t value); + +extern uint64_t +ecbor_uint64_to_big_endian (uint64_t value); + +extern float +ecbor_fp32_to_big_endian (float value); + +extern double +ecbor_fp64_to_big_endian (double value); + + +/* + * Memory + */ +extern void +ecbor_memcpy (void *dest, void *src, size_t num); + +#endif \ No newline at end of file -- cgit v1.2.3