]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-id128.h
journal: generate structured journal messages for a number of events
[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>
87d2c1ff
LP
26#include <string.h>
27
f9873976
LP
28#ifdef __cplusplus
29extern "C" {
30#endif
31
cb07866b
LP
32/* 128 Bit ID APIs. See sd-id128(3) for more information. */
33
87d2c1ff
LP
34typedef union sd_id128 sd_id128_t;
35
36union sd_id128 {
37 uint8_t bytes[16];
38 uint64_t qwords[2];
39};
40
41char *sd_id128_to_string(sd_id128_t id, char s[33]);
42
43int sd_id128_from_string(const char s[33], sd_id128_t *ret);
44
45int sd_id128_randomize(sd_id128_t *ret);
46
87d2c1ff
LP
47int sd_id128_get_machine(sd_id128_t *ret);
48
49int 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 63static 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