summaryrefslogtreecommitdiffstats
path: root/lib/libcbor/src/cbor/ints.c
diff options
context:
space:
mode:
authordjm <djm@openbsd.org>2019-11-28 02:58:39 +0000
committerdjm <djm@openbsd.org>2019-11-28 02:58:39 +0000
commit9e5c2ddccc4a7ac0840ab8aa8ee64df773f69be5 (patch)
tree87472542e42cefecfb278df616a2df50e52c34b1 /lib/libcbor/src/cbor/ints.c
parentFix the buffer cache code to not use a giant uvm obj of all pages (diff)
downloadwireguard-openbsd-9e5c2ddccc4a7ac0840ab8aa8ee64df773f69be5.tar.xz
wireguard-openbsd-9e5c2ddccc4a7ac0840ab8aa8ee64df773f69be5.zip
update to libcbor rev 56a43b1e799; this includes a number of fixes
for unaligned accesses, requested by miod@ ok deraadt@
Diffstat (limited to 'lib/libcbor/src/cbor/ints.c')
-rw-r--r--lib/libcbor/src/cbor/ints.c338
1 files changed, 161 insertions, 177 deletions
diff --git a/lib/libcbor/src/cbor/ints.c b/lib/libcbor/src/cbor/ints.c
index 26f08cd3453..328d0bdf9f1 100644
--- a/lib/libcbor/src/cbor/ints.c
+++ b/lib/libcbor/src/cbor/ints.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014-2017 Pavel Kalvoda <me@pavelkalvoda.com>
+ * Copyright (c) 2014-2019 Pavel Kalvoda <me@pavelkalvoda.com>
*
* libcbor is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
@@ -7,201 +7,185 @@
#include "ints.h"
-cbor_int_width cbor_int_get_width(const cbor_item_t *item)
-{
- assert(cbor_is_int(item));
- return item->metadata.int_metadata.width;
+cbor_int_width cbor_int_get_width(const cbor_item_t *item) {
+ assert(cbor_is_int(item));
+ return item->metadata.int_metadata.width;
}
-uint8_t cbor_get_uint8(const cbor_item_t *item)
-{
- assert(cbor_is_int(item));
- assert(cbor_int_get_width(item) == CBOR_INT_8);
- return *item->data;
+uint8_t cbor_get_uint8(const cbor_item_t *item) {
+ assert(cbor_is_int(item));
+ assert(cbor_int_get_width(item) == CBOR_INT_8);
+ return *item->data;
}
-uint16_t cbor_get_uint16(const cbor_item_t *item)
-{
- assert(cbor_is_int(item));
- assert(cbor_int_get_width(item) == CBOR_INT_16);
- return *(uint16_t *) item->data;
+uint16_t cbor_get_uint16(const cbor_item_t *item) {
+ assert(cbor_is_int(item));
+ assert(cbor_int_get_width(item) == CBOR_INT_16);
+ return *(uint16_t *)item->data;
}
-uint32_t cbor_get_uint32(const cbor_item_t *item)
-{
- assert(cbor_is_int(item));
- assert(cbor_int_get_width(item) == CBOR_INT_32);
- return *(uint32_t *) item->data;
+uint32_t cbor_get_uint32(const cbor_item_t *item) {
+ assert(cbor_is_int(item));
+ assert(cbor_int_get_width(item) == CBOR_INT_32);
+ return *(uint32_t *)item->data;
}
-uint64_t cbor_get_uint64(const cbor_item_t *item)
-{
- assert(cbor_is_int(item));
- assert(cbor_int_get_width(item) == CBOR_INT_64);
- return *(uint64_t *) item->data;
-}
+uint64_t cbor_get_uint64(const cbor_item_t *item) {
+ assert(cbor_is_int(item));
+ assert(cbor_int_get_width(item) == CBOR_INT_64);
+ return *(uint64_t *)item->data;
+}
+
+uint64_t cbor_get_int(const cbor_item_t *item) {
+ assert(cbor_is_int(item));
+ switch (cbor_int_get_width(item)) {
+ case CBOR_INT_8:
+ return cbor_get_uint8(item);
+ case CBOR_INT_16:
+ return cbor_get_uint16(item);
+ case CBOR_INT_32:
+ return cbor_get_uint32(item);
+ case CBOR_INT_64:
+ return cbor_get_uint64(item);
+ }
+ // TODO: This should be handled in a default branch
+ return 0xDEADBEEF; /* Compiler complaints */
+}
+
+void cbor_set_uint8(cbor_item_t *item, uint8_t value) {
+ assert(cbor_is_int(item));
+ assert(cbor_int_get_width(item) == CBOR_INT_8);
+ *item->data = value;
+}
+
+void cbor_set_uint16(cbor_item_t *item, uint16_t value) {
+ assert(cbor_is_int(item));
+ assert(cbor_int_get_width(item) == CBOR_INT_16);
+ *(uint16_t *)item->data = value;
+}
+
+void cbor_set_uint32(cbor_item_t *item, uint32_t value) {
+ assert(cbor_is_int(item));
+ assert(cbor_int_get_width(item) == CBOR_INT_32);
+ *(uint32_t *)item->data = value;
+}
-uint64_t cbor_get_int(const cbor_item_t * item)
-{
- assert(cbor_is_int(item));
- switch(cbor_int_get_width(item)) {
- case CBOR_INT_8: return cbor_get_uint8(item);
- case CBOR_INT_16: return cbor_get_uint16(item);
- case CBOR_INT_32: return cbor_get_uint32(item);
- case CBOR_INT_64: return cbor_get_uint64(item);
- }
- return 0xDEADBEEF; /* Compiler complaints */
+void cbor_set_uint64(cbor_item_t *item, uint64_t value) {
+ assert(cbor_is_int(item));
+ assert(cbor_int_get_width(item) == CBOR_INT_64);
+ *(uint64_t *)item->data = value;
}
-void cbor_set_uint8(cbor_item_t *item, uint8_t value)
-{
- assert(cbor_is_int(item));
- assert(cbor_int_get_width(item) == CBOR_INT_8);
- *item->data = value;
+void cbor_mark_uint(cbor_item_t *item) {
+ assert(cbor_is_int(item));
+ item->type = CBOR_TYPE_UINT;
}
-void cbor_set_uint16(cbor_item_t *item, uint16_t value)
-{
- assert(cbor_is_int(item));
- assert(cbor_int_get_width(item) == CBOR_INT_16);
- *(uint16_t *) item->data = value;
+void cbor_mark_negint(cbor_item_t *item) {
+ assert(cbor_is_int(item));
+ item->type = CBOR_TYPE_NEGINT;
}
+cbor_item_t *cbor_new_int8() {
+ cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t) + 1);
+ _CBOR_NOTNULL(item);
+ *item = (cbor_item_t){.data = (unsigned char *)item + sizeof(cbor_item_t),
+ .refcount = 1,
+ .metadata = {.int_metadata = {.width = CBOR_INT_8}},
+ .type = CBOR_TYPE_UINT};
+ return item;
+}
-void cbor_set_uint32(cbor_item_t *item, uint32_t value)
-{
- assert(cbor_is_int(item));
- assert(cbor_int_get_width(item) == CBOR_INT_32);
- *(uint32_t *) item->data = value;
+cbor_item_t *cbor_new_int16() {
+ cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t) + 2);
+ _CBOR_NOTNULL(item);
+ *item = (cbor_item_t){.data = (unsigned char *)item + sizeof(cbor_item_t),
+ .refcount = 1,
+ .metadata = {.int_metadata = {.width = CBOR_INT_16}},
+ .type = CBOR_TYPE_UINT};
+ return item;
}
-void cbor_set_uint64(cbor_item_t *item, uint64_t value)
-{
- assert(cbor_is_int(item));
- assert(cbor_int_get_width(item) == CBOR_INT_64);
- *(uint64_t *) item->data = value;
+cbor_item_t *cbor_new_int32() {
+ cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t) + 4);
+ _CBOR_NOTNULL(item);
+ *item = (cbor_item_t){.data = (unsigned char *)item + sizeof(cbor_item_t),
+ .refcount = 1,
+ .metadata = {.int_metadata = {.width = CBOR_INT_32}},
+ .type = CBOR_TYPE_UINT};
+ return item;
+}
+
+cbor_item_t *cbor_new_int64() {
+ cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t) + 8);
+ _CBOR_NOTNULL(item);
+ *item = (cbor_item_t){.data = (unsigned char *)item + sizeof(cbor_item_t),
+ .refcount = 1,
+ .metadata = {.int_metadata = {.width = CBOR_INT_64}},
+ .type = CBOR_TYPE_UINT};
+ return item;
+}
+
+cbor_item_t *cbor_build_uint8(uint8_t value) {
+ cbor_item_t *item = cbor_new_int8();
+ _CBOR_NOTNULL(item);
+ cbor_set_uint8(item, value);
+ cbor_mark_uint(item);
+ return item;
}
-void cbor_mark_uint(cbor_item_t *item)
-{
- assert(cbor_is_int(item));
- item->type = CBOR_TYPE_UINT;
-}
-
-void cbor_mark_negint(cbor_item_t *item)
-{
- assert(cbor_is_int(item));
- item->type = CBOR_TYPE_NEGINT;
+cbor_item_t *cbor_build_uint16(uint16_t value) {
+ cbor_item_t *item = cbor_new_int16();
+ _CBOR_NOTNULL(item);
+ cbor_set_uint16(item, value);
+ cbor_mark_uint(item);
+ return item;
+}
+
+cbor_item_t *cbor_build_uint32(uint32_t value) {
+ cbor_item_t *item = cbor_new_int32();
+ _CBOR_NOTNULL(item);
+ cbor_set_uint32(item, value);
+ cbor_mark_uint(item);
+ return item;
}
-
-cbor_item_t *cbor_new_int8()
-{
- cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t) + 1);
- *item = (cbor_item_t) {
- .data = (unsigned char *) item + sizeof(cbor_item_t),
- .refcount = 1,
- .metadata = {.int_metadata = {.width = CBOR_INT_8}},
- .type = CBOR_TYPE_UINT
- };
- return item;
-}
-
-cbor_item_t *cbor_new_int16()
-{
- cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t) + 2);
- *item = (cbor_item_t) {
- .data = (unsigned char *) item + sizeof(cbor_item_t),
- .refcount = 1,
- .metadata = {.int_metadata = {.width = CBOR_INT_16}},
- .type = CBOR_TYPE_UINT
- };
- return item;
-}
-
-cbor_item_t *cbor_new_int32()
-{
- cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t) + 4);
- *item = (cbor_item_t) {
- .data = (unsigned char *) item + sizeof(cbor_item_t),
- .refcount = 1,
- .metadata = {.int_metadata = {.width = CBOR_INT_32}},
- .type = CBOR_TYPE_UINT
- };
- return item;
-}
-
-cbor_item_t *cbor_new_int64()
-{
- cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t) + 8);
- *item = (cbor_item_t) {
- .data = (unsigned char *) item + sizeof(cbor_item_t),
- .refcount = 1,
- .metadata = {.int_metadata = {.width = CBOR_INT_64}},
- .type = CBOR_TYPE_UINT
- };
- return item;
-}
-
-cbor_item_t *cbor_build_uint8(uint8_t value)
-{
- cbor_item_t *item = cbor_new_int8();
- cbor_set_uint8(item, value);
- cbor_mark_uint(item);
- return item;
-}
-
-cbor_item_t *cbor_build_uint16(uint16_t value)
-{
- cbor_item_t *item = cbor_new_int16();
- cbor_set_uint16(item, value);
- cbor_mark_uint(item);
- return item;
-}
-
-cbor_item_t *cbor_build_uint32(uint32_t value)
-{
- cbor_item_t *item = cbor_new_int32();
- cbor_set_uint32(item, value);
- cbor_mark_uint(item);
- return item;
-}
-
-cbor_item_t *cbor_build_uint64(uint64_t value)
-{
- cbor_item_t *item = cbor_new_int64();
- cbor_set_uint64(item, value);
- cbor_mark_uint(item);
- return item;
-}
-
-cbor_item_t *cbor_build_negint8(uint8_t value)
-{
- cbor_item_t *item = cbor_new_int8();
- cbor_set_uint8(item, value);
- cbor_mark_negint(item);
- return item;
-}
-
-cbor_item_t *cbor_build_negint16(uint16_t value)
-{
- cbor_item_t *item = cbor_new_int16();
- cbor_set_uint16(item, value);
- cbor_mark_negint(item);
- return item;
-}
-
-cbor_item_t *cbor_build_negint32(uint32_t value)
-{
- cbor_item_t *item = cbor_new_int32();
- cbor_set_uint32(item, value);
- cbor_mark_negint(item);
- return item;
-}
-
-cbor_item_t *cbor_build_negint64(uint64_t value)
-{
- cbor_item_t *item = cbor_new_int64();
- cbor_set_uint64(item, value);
- cbor_mark_negint(item);
- return item;
+
+cbor_item_t *cbor_build_uint64(uint64_t value) {
+ cbor_item_t *item = cbor_new_int64();
+ _CBOR_NOTNULL(item);
+ cbor_set_uint64(item, value);
+ cbor_mark_uint(item);
+ return item;
+}
+
+cbor_item_t *cbor_build_negint8(uint8_t value) {
+ cbor_item_t *item = cbor_new_int8();
+ _CBOR_NOTNULL(item);
+ cbor_set_uint8(item, value);
+ cbor_mark_negint(item);
+ return item;
+}
+
+cbor_item_t *cbor_build_negint16(uint16_t value) {
+ cbor_item_t *item = cbor_new_int16();
+ _CBOR_NOTNULL(item);
+ cbor_set_uint16(item, value);
+ cbor_mark_negint(item);
+ return item;
+}
+
+cbor_item_t *cbor_build_negint32(uint32_t value) {
+ cbor_item_t *item = cbor_new_int32();
+ _CBOR_NOTNULL(item);
+ cbor_set_uint32(item, value);
+ cbor_mark_negint(item);
+ return item;
+}
+
+cbor_item_t *cbor_build_negint64(uint64_t value) {
+ cbor_item_t *item = cbor_new_int64();
+ _CBOR_NOTNULL(item);
+ cbor_set_uint64(item, value);
+ cbor_mark_negint(item);
+ return item;
}