]>
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> | |
87d2c1ff LP |
26 | #include <string.h> |
27 | ||
f9873976 LP |
28 | #ifdef __cplusplus |
29 | extern "C" { | |
30 | #endif | |
31 | ||
cb07866b LP |
32 | /* 128 Bit ID APIs. See sd-id128(3) for more information. */ |
33 | ||
87d2c1ff LP |
34 | typedef union sd_id128 sd_id128_t; |
35 | ||
36 | union sd_id128 { | |
37 | uint8_t bytes[16]; | |
38 | uint64_t qwords[2]; | |
39 | }; | |
40 | ||
41 | char *sd_id128_to_string(sd_id128_t id, char s[33]); | |
42 | ||
43 | int sd_id128_from_string(const char s[33], sd_id128_t *ret); | |
44 | ||
45 | int sd_id128_randomize(sd_id128_t *ret); | |
46 | ||
87d2c1ff LP |
47 | int sd_id128_get_machine(sd_id128_t *ret); |
48 | ||
49 | int sd_id128_get_boot(sd_id128_t *ret); | |
50 | ||
51 | #define SD_ID128_MAKE(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) \ | |
52 | ((sd_id128_t) { .bytes = { 0x##v0, 0x##v1, 0x##v2, 0x##v3, 0x##v4, 0x##v5, 0x##v6, 0x##v7, \ | |
53 | 0x##v8, 0x##v9, 0x##v10, 0x##v11, 0x##v12, 0x##v13, 0x##v14, 0x##v15 }}) | |
54 | ||
8e9e6d56 | 55 | /* Note that SD_ID128_FORMAT_VAL will evaluate the passed argument 16 |
eaff7bd8 LP |
56 | * times. It is hence not a good idea to call this macro with an |
57 | * expensive function as paramater or an expression with side | |
58 | * effects */ | |
877d54e9 | 59 | |
8e9e6d56 LP |
60 | #define SD_ID128_FORMAT_STR "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x" |
61 | #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 | 62 | |
8e4e8df5 | 63 | static inline int sd_id128_equal(sd_id128_t a, sd_id128_t b) { |
87d2c1ff LP |
64 | return memcmp(&a, &b, 16) == 0; |
65 | } | |
66 | ||
f9873976 LP |
67 | #ifdef __cplusplus |
68 | } | |
69 | #endif | |
70 | ||
87d2c1ff | 71 | #endif |