xref: /third_party/mbedtls/library/alignment.c (revision a8e1175b)
1#include "alignment.h"
2
3uint16_t mbedtls_get_unaligned_uint16(const void *p)
4{
5    uint16_t r;
6#if defined(UINT_UNALIGNED)
7    mbedtls_uint16_unaligned_t *p16 = (mbedtls_uint16_unaligned_t *) p;
8    r = *p16;
9#elif defined(UINT_UNALIGNED_STRUCT)
10    mbedtls_uint16_unaligned_t *p16 = (mbedtls_uint16_unaligned_t *) p;
11    r = p16->x;
12#else
13    memcpy(&r, p, sizeof(r));
14#endif
15    return r;
16}
17
18void mbedtls_put_unaligned_uint16(void *p, uint16_t x)
19{
20#if defined(UINT_UNALIGNED)
21    mbedtls_uint16_unaligned_t *p16 = (mbedtls_uint16_unaligned_t *) p;
22    *p16 = x;
23#elif defined(UINT_UNALIGNED_STRUCT)
24    mbedtls_uint16_unaligned_t *p16 = (mbedtls_uint16_unaligned_t *) p;
25    p16->x = x;
26#else
27    memcpy(p, &x, sizeof(x));
28#endif
29}
30
31uint32_t mbedtls_get_unaligned_uint32(const void *p)
32{
33    uint32_t r;
34#if defined(UINT_UNALIGNED)
35    mbedtls_uint32_unaligned_t *p32 = (mbedtls_uint32_unaligned_t *) p;
36    r = *p32;
37#elif defined(UINT_UNALIGNED_STRUCT)
38    mbedtls_uint32_unaligned_t *p32 = (mbedtls_uint32_unaligned_t *) p;
39    r = p32->x;
40#else
41    memcpy(&r, p, sizeof(r));
42#endif
43    return r;
44}
45
46void mbedtls_put_unaligned_uint32(void *p, uint32_t x)
47{
48#if defined(UINT_UNALIGNED)
49    mbedtls_uint32_unaligned_t *p32 = (mbedtls_uint32_unaligned_t *) p;
50    *p32 = x;
51#elif defined(UINT_UNALIGNED_STRUCT)
52    mbedtls_uint32_unaligned_t *p32 = (mbedtls_uint32_unaligned_t *) p;
53    p32->x = x;
54#else
55    memcpy(p, &x, sizeof(x));
56#endif
57}
58
59uint64_t mbedtls_get_unaligned_uint64(const void *p)
60{
61    uint64_t r;
62#if defined(UINT_UNALIGNED)
63    mbedtls_uint64_unaligned_t *p64 = (mbedtls_uint64_unaligned_t *) p;
64    r = *p64;
65#elif defined(UINT_UNALIGNED_STRUCT)
66    mbedtls_uint64_unaligned_t *p64 = (mbedtls_uint64_unaligned_t *) p;
67    r = p64->x;
68#else
69    memcpy(&r, p, sizeof(r));
70#endif
71    return r;
72}
73
74void mbedtls_put_unaligned_uint64(void *p, uint64_t x)
75{
76#if defined(UINT_UNALIGNED)
77    mbedtls_uint64_unaligned_t *p64 = (mbedtls_uint64_unaligned_t *) p;
78    *p64 = x;
79#elif defined(UINT_UNALIGNED_STRUCT)
80    mbedtls_uint64_unaligned_t *p64 = (mbedtls_uint64_unaligned_t *) p;
81    p64->x = x;
82#else
83    memcpy(p, &x, sizeof(x));
84#endif
85}