]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-id128.h
relicense to LGPLv2.1 (with exceptions)
[thirdparty/systemd.git] / src / systemd / sd-id128.h
CommitLineData
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
30extern "C" {
31#endif
32
87d2c1ff
LP
33typedef union sd_id128 sd_id128_t;
34
35union sd_id128 {
36 uint8_t bytes[16];
37 uint64_t qwords[2];
38};
39
40char *sd_id128_to_string(sd_id128_t id, char s[33]);
41
42int sd_id128_from_string(const char s[33], sd_id128_t *ret);
43
44int sd_id128_randomize(sd_id128_t *ret);
45
87d2c1ff
LP
46int sd_id128_get_machine(sd_id128_t *ret);
47
48int 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
61static 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