annotate src/lib/byteorder.h @ 22664:fea53c2725c0

director: Fix director_max_parallel_moves/kicks type Should be uint, not time.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 09 Nov 2017 12:24:16 +0200
parents 57b5452d4528
children 639251a1d58e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
1 /*
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
2 * Copyright (c) 2016-2017 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
3 *
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
5 * of this software and associated documentation files (the "Software"), to deal
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
6 * in the Software without restriction, including without limitation the rights
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
8 * copies of the Software, and to permit persons to whom the Software is
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
9 * furnished to do so, subject to the following conditions:
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
10 *
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
11 * The above copyright notice and this permission notice shall be included in
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
12 * all copies or substantial portions of the Software.
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
13 *
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
20 * SOFTWARE.
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
21 */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
22
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
23 #ifndef BYTEORDER_H
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
24 #define BYTEORDER_H
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
25
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
26 /*
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
27 * These prototypes exist to catch bugs in the code generating macros below.
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
28 */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
29 /* return byte swapped input */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
30 static inline uint64_t bswap_64(uint64_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
31 static inline uint32_t bswap_32(uint32_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
32 static inline uint16_t bswap_16(uint16_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
33 static inline uint8_t bswap_8(uint8_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
34
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
35 /* load an unaligned cpu native endian number from memory */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
36 static inline uint64_t cpu64_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
37 static inline uint32_t cpu32_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
38 static inline uint16_t cpu16_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
39 static inline uint8_t cpu8_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
40
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
41 /* load an unaligned big endian number from memory */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
42 static inline uint64_t be64_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
43 static inline uint32_t be32_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
44 static inline uint16_t be16_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
45 static inline uint8_t be8_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
46
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
47 /* load an unaligned little endian number from memory */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
48 static inline uint64_t le64_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
49 static inline uint32_t le32_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
50 static inline uint16_t le16_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
51 static inline uint8_t le8_to_cpu_unaligned(const void *in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
52
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
53 /* store into memory a cpu native endian number as a big endian number */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
54 static inline void cpu64_to_be_unaligned(uint64_t in, void *out);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
55 static inline void cpu32_to_be_unaligned(uint32_t in, void *out);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
56 static inline void cpu16_to_be_unaligned(uint16_t in, void *out);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
57 static inline void cpu8_to_be_unaligned(uint8_t in, void *out);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
58
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
59 /* store into memory a cpu native endian number as a little endian number */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
60 static inline void cpu64_to_le_unaligned(uint64_t in, void *out);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
61 static inline void cpu32_to_le_unaligned(uint32_t in, void *out);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
62 static inline void cpu16_to_le_unaligned(uint16_t in, void *out);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
63 static inline void cpu8_to_le_unaligned(uint8_t in, void *out);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
64
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
65 /* convert a big endian input into cpu native endian */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
66 static inline uint64_t be64_to_cpu(uint64_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
67 static inline uint32_t be32_to_cpu(uint32_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
68 static inline uint16_t be16_to_cpu(uint16_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
69 static inline uint8_t be8_to_cpu(uint8_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
70
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
71 /* convert a cpu native endian input into big endian */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
72 static inline uint64_t cpu64_to_be(uint64_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
73 static inline uint32_t cpu32_to_be(uint32_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
74 static inline uint16_t cpu16_to_be(uint16_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
75 static inline uint8_t cpu8_to_be(uint8_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
76
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
77 /* convert a little endian input into cpu native endian */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
78 static inline uint64_t le64_to_cpu(uint64_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
79 static inline uint32_t le32_to_cpu(uint32_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
80 static inline uint16_t le16_to_cpu(uint16_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
81 static inline uint8_t le8_to_cpu(uint8_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
82
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
83 /* convert a cpu native endian input into little endian */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
84 static inline uint64_t cpu64_to_le(uint64_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
85 static inline uint32_t cpu32_to_le(uint32_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
86 static inline uint16_t cpu16_to_le(uint16_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
87 static inline uint8_t cpu8_to_le(uint8_t in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
88
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
89 /*
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
90 * byte swapping
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
91 */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
92 static inline uint64_t bswap_64(uint64_t in)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
93 {
22618
57b5452d4528 Added "ULL" to the hex literals that needed it.
Bill Cole <18053819+grumpybozo@users.noreply.github.com>
parents: 22400
diff changeset
94 return ((in & 0xff00000000000000ULL) >> 56) |
57b5452d4528 Added "ULL" to the hex literals that needed it.
Bill Cole <18053819+grumpybozo@users.noreply.github.com>
parents: 22400
diff changeset
95 ((in & 0x00ff000000000000ULL) >> 40) |
57b5452d4528 Added "ULL" to the hex literals that needed it.
Bill Cole <18053819+grumpybozo@users.noreply.github.com>
parents: 22400
diff changeset
96 ((in & 0x0000ff0000000000ULL) >> 24) |
57b5452d4528 Added "ULL" to the hex literals that needed it.
Bill Cole <18053819+grumpybozo@users.noreply.github.com>
parents: 22400
diff changeset
97 ((in & 0x000000ff00000000ULL) >> 8) |
57b5452d4528 Added "ULL" to the hex literals that needed it.
Bill Cole <18053819+grumpybozo@users.noreply.github.com>
parents: 22400
diff changeset
98 ((in & 0x00000000ff000000ULL) << 8) |
57b5452d4528 Added "ULL" to the hex literals that needed it.
Bill Cole <18053819+grumpybozo@users.noreply.github.com>
parents: 22400
diff changeset
99 ((in & 0x0000000000ff0000ULL) << 24) |
57b5452d4528 Added "ULL" to the hex literals that needed it.
Bill Cole <18053819+grumpybozo@users.noreply.github.com>
parents: 22400
diff changeset
100 ((in & 0x000000000000ff00ULL) << 40) |
57b5452d4528 Added "ULL" to the hex literals that needed it.
Bill Cole <18053819+grumpybozo@users.noreply.github.com>
parents: 22400
diff changeset
101 ((in & 0x00000000000000ffULL) << 56);
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
102 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
103
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
104 static inline uint32_t bswap_32(uint32_t in)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
105 {
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
106 return ((in & 0xff000000) >> 24) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
107 ((in & 0x00ff0000) >> 8) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
108 ((in & 0x0000ff00) << 8) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
109 ((in & 0x000000ff) << 24);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
110 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
111
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
112 static inline uint16_t bswap_16(uint16_t in)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
113 {
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
114 return ((in & 0xff00) >> 8) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
115 ((in & 0x00ff) << 8);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
116 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
117
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
118 static inline uint8_t bswap_8(uint8_t in)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
119 {
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
120 return (in & 0xff);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
121 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
122
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
123 /*
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
124 * unaligned big-endian integer
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
125 */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
126 static inline uint64_t be64_to_cpu_unaligned(const void *in)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
127 {
22400
fb6142ca50e3 lib: add explicit casts to byteorder macros
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents: 22398
diff changeset
128 const uint8_t *p = (const uint8_t *) in;
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
129
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
130 return (((uint64_t) p[0] << 56) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
131 ((uint64_t) p[1] << 48) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
132 ((uint64_t) p[2] << 40) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
133 ((uint64_t) p[3] << 32) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
134 ((uint64_t) p[4] << 24) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
135 ((uint64_t) p[5] << 16) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
136 ((uint64_t) p[6] << 8) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
137 ((uint64_t) p[7]));
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
138 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
139
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
140 static inline void cpu64_to_be_unaligned(uint64_t in, void *out)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
141 {
22400
fb6142ca50e3 lib: add explicit casts to byteorder macros
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents: 22398
diff changeset
142 uint8_t *p = (uint8_t *) out;
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
143
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
144 p[0] = (in >> 56) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
145 p[1] = (in >> 48) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
146 p[2] = (in >> 40) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
147 p[3] = (in >> 32) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
148 p[4] = (in >> 24) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
149 p[5] = (in >> 16) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
150 p[6] = (in >> 8) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
151 p[7] = in & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
152 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
153
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
154 static inline uint32_t be32_to_cpu_unaligned(const void *in)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
155 {
22400
fb6142ca50e3 lib: add explicit casts to byteorder macros
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents: 22398
diff changeset
156 const uint8_t *p = (const uint8_t *) in;
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
157
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
158 return (((uint32_t) p[0] << 24) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
159 ((uint32_t) p[1] << 16) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
160 ((uint32_t) p[2] << 8) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
161 ((uint32_t) p[3]));
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
162 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
163
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
164 static inline void cpu32_to_be_unaligned(uint32_t in, void *out)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
165 {
22400
fb6142ca50e3 lib: add explicit casts to byteorder macros
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents: 22398
diff changeset
166 uint8_t *p = (uint8_t *) out;
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
167
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
168 p[0] = (in >> 24) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
169 p[1] = (in >> 16) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
170 p[2] = (in >> 8) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
171 p[3] = in & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
172 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
173
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
174 static inline uint16_t be16_to_cpu_unaligned(const void *in)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
175 {
22400
fb6142ca50e3 lib: add explicit casts to byteorder macros
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents: 22398
diff changeset
176 const uint8_t *p = (const uint8_t *) in;
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
177
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
178 return (((uint16_t) p[0] << 8) |
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
179 ((uint16_t) p[1]));
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
180 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
181
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
182 static inline void cpu16_to_be_unaligned(uint16_t in, void *out)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
183 {
22400
fb6142ca50e3 lib: add explicit casts to byteorder macros
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents: 22398
diff changeset
184 uint8_t *p = (uint8_t *) out;
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
185
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
186 p[0] = (in >> 8) & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
187 p[1] = in & 0xff;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
188 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
189
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
190 static inline uint8_t be8_to_cpu_unaligned(const void *in)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
191 {
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
192 return *((const uint8_t *) in);
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
193 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
194
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
195 static inline void cpu8_to_be_unaligned(uint8_t in, void *out)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
196 {
22400
fb6142ca50e3 lib: add explicit casts to byteorder macros
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents: 22398
diff changeset
197 uint8_t *p = (uint8_t *) out;
22398
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
198
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
199 *p = in;
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
200 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
201
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
202 /*
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
203 * unaligned little-endian & cpu-endian integers
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
204 */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
205 #define __GEN(size, bswap) \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
206 static inline uint##size##_t le##size##_to_cpu_unaligned(const void *in)\
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
207 { \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
208 uint##size##_t x = be##size##_to_cpu_unaligned(in); \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
209 /* we read a LE int as BE, so we always have to byte swap */ \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
210 return bswap_##size(x); \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
211 } \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
212 static inline void cpu##size##_to_le_unaligned(uint##size##_t in, \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
213 void *out) \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
214 { \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
215 /* we'll be writing in BE, so we always have to byte swap */ \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
216 cpu##size##_to_be_unaligned(bswap_##size(in), out); \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
217 } \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
218 static inline uint##size##_t cpu##size##_to_cpu_unaligned(const void *in)\
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
219 { \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
220 uint##size##_t x = be##size##_to_cpu_unaligned(in); \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
221 return bswap; \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
222 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
223
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
224 #if WORDS_BIGENDIAN
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
225 #define GEN(size) __GEN(size, x)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
226 #else
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
227 #define GEN(size) __GEN(size, bswap_##size(x))
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
228 #endif
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
229
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
230 GEN(64)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
231 GEN(32)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
232 GEN(16)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
233 GEN(8)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
234
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
235 #undef __GEN
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
236 #undef GEN
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
237
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
238 /*
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
239 * byte ordering
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
240 */
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
241 #define ___GEN(from, size, to, bswap) \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
242 static inline uint##size##_t from##size##_to_##to(uint##size##_t x) \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
243 { \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
244 return bswap; \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
245 }
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
246
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
247 #if WORDS_BIGENDIAN
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
248 #define __GEN(from, size, to, be, le) ___GEN(from, size, to, be)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
249 #else
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
250 #define __GEN(from, size, to, be, le) ___GEN(from, size, to, le)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
251 #endif
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
252
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
253 #define GEN(size) \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
254 __GEN(be, size, cpu, x, bswap_##size(x)) \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
255 __GEN(cpu, size, be, x, bswap_##size(x)) \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
256 __GEN(le, size, cpu, bswap_##size(x), x) \
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
257 __GEN(cpu, size, le, bswap_##size(x), x)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
258
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
259 GEN(64)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
260 GEN(32)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
261 GEN(16)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
262 GEN(8)
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
263
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
264 #undef ___GEN
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
265 #undef __GEN
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
266 #undef GEN
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
267
1b4e7b89b161 lib: import byte swapping & endian converting functions
Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi>
parents:
diff changeset
268 #endif