udev: String substitutions can be done in ENV, too
[systemd_ALT.git] / src / basic / unaligned.h
blob04580cfb636b5b7d1130dc936862170fc38100f2
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
4 #include <endian.h>
5 #include <stdint.h>
7 #include "unaligned-fundamental.h"
9 /* BE */
11 static inline uint16_t unaligned_read_be16(const void *_u) {
12 const struct __attribute__((__packed__, __may_alias__)) { uint16_t x; } *u = _u;
14 return be16toh(u->x);
17 static inline uint32_t unaligned_read_be32(const void *_u) {
18 const struct __attribute__((__packed__, __may_alias__)) { uint32_t x; } *u = _u;
20 return be32toh(u->x);
23 static inline uint64_t unaligned_read_be64(const void *_u) {
24 const struct __attribute__((__packed__, __may_alias__)) { uint64_t x; } *u = _u;
26 return be64toh(u->x);
29 static inline void unaligned_write_be16(void *_u, uint16_t a) {
30 struct __attribute__((__packed__, __may_alias__)) { uint16_t x; } *u = _u;
32 u->x = be16toh(a);
35 static inline void unaligned_write_be32(void *_u, uint32_t a) {
36 struct __attribute__((__packed__, __may_alias__)) { uint32_t x; } *u = _u;
38 u->x = be32toh(a);
41 static inline void unaligned_write_be64(void *_u, uint64_t a) {
42 struct __attribute__((__packed__, __may_alias__)) { uint64_t x; } *u = _u;
44 u->x = be64toh(a);
47 /* LE */
49 static inline uint16_t unaligned_read_le16(const void *_u) {
50 const struct __attribute__((__packed__, __may_alias__)) { uint16_t x; } *u = _u;
52 return le16toh(u->x);
55 static inline uint32_t unaligned_read_le32(const void *_u) {
56 const struct __attribute__((__packed__, __may_alias__)) { uint32_t x; } *u = _u;
58 return le32toh(u->x);
61 static inline uint64_t unaligned_read_le64(const void *_u) {
62 const struct __attribute__((__packed__, __may_alias__)) { uint64_t x; } *u = _u;
64 return le64toh(u->x);
67 static inline void unaligned_write_le16(void *_u, uint16_t a) {
68 struct __attribute__((__packed__, __may_alias__)) { uint16_t x; } *u = _u;
70 u->x = le16toh(a);
73 static inline void unaligned_write_le32(void *_u, uint32_t a) {
74 struct __attribute__((__packed__, __may_alias__)) { uint32_t x; } *u = _u;
76 u->x = le32toh(a);
79 static inline void unaligned_write_le64(void *_u, uint64_t a) {
80 struct __attribute__((__packed__, __may_alias__)) { uint64_t x; } *u = _u;
82 u->x = le64toh(a);