]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/systemd/sd-id128.h
relicense to LGPLv2.1 (with exceptions)
[thirdparty/systemd.git] / src / systemd / sd-id128.h
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 #ifndef fooid128hfoo
4 #define fooid128hfoo
5
6 /***
7 This file is part of systemd.
8
9 Copyright 2011 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Lesser General Public License for more details.
20
21 You should have received a copy of the GNU Lesser General Public License
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23 ***/
24
25 #include <inttypes.h>
26 #include <stdbool.h>
27 #include <string.h>
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 typedef union sd_id128 sd_id128_t;
34
35 union sd_id128 {
36 uint8_t bytes[16];
37 uint64_t qwords[2];
38 };
39
40 char *sd_id128_to_string(sd_id128_t id, char s[33]);
41
42 int sd_id128_from_string(const char s[33], sd_id128_t *ret);
43
44 int sd_id128_randomize(sd_id128_t *ret);
45
46 int sd_id128_get_machine(sd_id128_t *ret);
47
48 int sd_id128_get_boot(sd_id128_t *ret);
49
50 #define SD_ID128_MAKE(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) \
51 ((sd_id128_t) { .bytes = { 0x##v0, 0x##v1, 0x##v2, 0x##v3, 0x##v4, 0x##v5, 0x##v6, 0x##v7, \
52 0x##v8, 0x##v9, 0x##v10, 0x##v11, 0x##v12, 0x##v13, 0x##v14, 0x##v15 }})
53
54 /* Note that SD_ID128_FORMAT_VAL will evaluate the passed argument 16
55 * times. It is hence not a good idea to call this macro with an
56 * expensive function as paramater or an expression with side
57 * effects */
58 #define SD_ID128_FORMAT_STR "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
59 #define SD_ID128_FORMAT_VAL(x) (x).bytes[0], (x).bytes[1], (x).bytes[2], (x).bytes[3], (x).bytes[4], (x).bytes[5], (x).bytes[6], (x).bytes[7], (x).bytes[8], (x).bytes[9], (x).bytes[10], (x).bytes[11], (x).bytes[12], (x).bytes[13], (x).bytes[14], (x).bytes[15]
60
61 static inline bool sd_id128_equal(sd_id128_t a, sd_id128_t b) {
62 return memcmp(&a, &b, 16) == 0;
63 }
64
65 #ifdef __cplusplus
66 }
67 #endif
68
69 #endif