]>
Commit | Line | Data |
---|---|---|
87d2c1ff LP |
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 | |
5430f7f2 LP |
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 | |
87d2c1ff LP |
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 | |
5430f7f2 | 19 | Lesser General Public License for more details. |
87d2c1ff | 20 | |
5430f7f2 | 21 | You should have received a copy of the GNU Lesser General Public License |
87d2c1ff LP |
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 | ||
f9873976 LP |
29 | #ifdef __cplusplus |
30 | extern "C" { | |
31 | #endif | |
32 | ||
87d2c1ff LP |
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 | ||
87d2c1ff LP |
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 | ||
8e9e6d56 | 54 | /* Note that SD_ID128_FORMAT_VAL will evaluate the passed argument 16 |
eaff7bd8 LP |
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 */ | |
8e9e6d56 LP |
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] | |
eaff7bd8 | 60 | |
87d2c1ff LP |
61 | static inline bool sd_id128_equal(sd_id128_t a, sd_id128_t b) { |
62 | return memcmp(&a, &b, 16) == 0; | |
63 | } | |
64 | ||
f9873976 LP |
65 | #ifdef __cplusplus |
66 | } | |
67 | #endif | |
68 | ||
87d2c1ff | 69 | #endif |