summaryrefslogtreecommitdiffstats
path: root/include/iprt/uuid.h
blob: 3c95a6412c27fbfc6301cc07583fe86f0e012a05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/** @file
 * IPRT - Universal Unique Identifiers (UUID).
 */

/*
 * Copyright (C) 2006-2022 Oracle and/or its affiliates.
 *
 * This file is part of VirtualBox base platform packages, as
 * available from https://www.virtualbox.org.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, in version 3 of the
 * License.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <https://www.gnu.org/licenses>.
 *
 * The contents of this file may alternatively be used under the terms
 * of the Common Development and Distribution License Version 1.0
 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
 * in the VirtualBox distribution, in which case the provisions of the
 * CDDL are applicable instead of those of the GPL.
 *
 * You may elect to license modified versions of this file under the
 * terms and conditions of either the GPL or the CDDL or both.
 *
 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
 */

#ifndef IPRT_INCLUDED_uuid_h
#define IPRT_INCLUDED_uuid_h
#ifndef RT_WITHOUT_PRAGMA_ONCE
# pragma once
#endif

#include <iprt/cdefs.h>
#include <iprt/types.h>

RT_C_DECLS_BEGIN

/** @defgroup grp_rt_uuid       RTUuid - Universally Unique Identifiers
 * @ingroup grp_rt
 * @{
 */

/**
 * Generates new UUID value.
 *
 * @note IPRT uses little endian byte ordering in the UUID integer fields. If
 * you want to pass IPRT UUIDs in binary representation to other UUID libraries
 * and expect to get exactly the same string representation as in IPRT, you
 * need to convert the first three integer fields (one 32 bit value, two 16 bit
 * values) separately to big endian (also called network byte order).
 *
 * @sa RTUUID::Gen
 *
 * @returns iprt status code.
 * @param   pUuid           Where to store generated uuid.
 */
RTDECL(int)  RTUuidCreate(PRTUUID pUuid);

/**
 * Makes null UUID value.
 *
 * @returns iprt status code.
 * @param   pUuid           Where to store generated null uuid.
 */
RTDECL(int)  RTUuidClear(PRTUUID pUuid);

/**
 * Checks if UUID is null.
 *
 * @returns true if UUID is null.
 * @param   pUuid           uuid to check.
 */
RTDECL(bool)  RTUuidIsNull(PCRTUUID pUuid);

/**
 * Compares two UUID values.
 *
 * @returns 0 if eq, < 0 or > 0.
 * @param   pUuid1          First value to compare.  NULL is treated like if
 *                          RTUuidIsNull() return true.
 * @param   pUuid2          Second value to compare.  NULL is treated like if
 *                          RTUuidIsNull() return true.
 */
RTDECL(int)  RTUuidCompare(PCRTUUID pUuid1, PCRTUUID pUuid2);

/**
 * Compares a UUID value with a UUID string.
 *
 * @note IPRT uses little endian byte ordering in the UUID integer fields. If
 * you want to pass IPRT UUIDs in binary representation to other UUID libraries
 * and expect to get exactly the same string representation as in IPRT, you need
 * to convert the first three integer fields (one 32 bit value, two 16 bit
 * values) separately to big endian (also called network byte order).
 * Correspondingly, if you want to get the right result with UUIDs which are in
 * big endian format, you need to convert them before using this function.
 *
 * @sa RTUUID::Gen
 *
 * @returns 0 if eq, < 0 or > 0.
 * @param   pUuid1          First value to compare.  NULL is not allowed.
 * @param   pszString2      The 2nd UUID in string form.  NULL or malformed
 *                          string is not permitted.
 */
RTDECL(int)  RTUuidCompareStr(PCRTUUID pUuid1, const char *pszString2);

/**
 * Compares two UUID strings.
 *
 * @returns 0 if eq, < 0 or > 0.
 * @param   pszString1      The 1st UUID in string from.  NULL or malformed
 *                          string is not permitted.
 * @param   pszString2      The 2nd UUID in string form.  NULL or malformed
 *                          string is not permitted.
 */
RTDECL(int)  RTUuidCompare2Strs(const char *pszString1, const char *pszString2);

/**
 * Converts binary UUID to its string representation.
 *
 * @note IPRT uses little endian byte ordering in the UUID integer fields. If
 * you want to pass IPRT UUIDs in binary representation to other UUID libraries
 * and expect to get exactly the same string representation as in IPRT, you
 * need to convert the first three integer fields (one 32 bit value, two 16 bit
 * values) separately to big endian (also called network byte order).
 * Correspondingly, if you want to get the right result with UUIDs which are in
 * big endian format, you need to convert them before using this function.
 *
 * @sa RTUUID::Gen
 *
 * @returns iprt status code.
 * @param   pUuid           Uuid to convert.
 * @param   pszString       Where to store result string.
 * @param   cchString       pszString buffer length, must be >= RTUUID_STR_LENGTH.
 */
RTDECL(int)  RTUuidToStr(PCRTUUID pUuid, char *pszString, size_t cchString);

/**
 * Converts UUID from its string representation to binary format.
 *
 * @note IPRT uses little endian byte ordering in the UUID integer fields. If
 * you want to pass IPRT UUIDs in binary representation to other UUID libraries
 * and expect to get exactly the same string representation as in IPRT, you
 * need to convert the first three integer fields (one 32 bit value, two 16 bit
 * values) separately to big endian (also called network byte order).
 * Correspondingly, if you want to get the right result with UUIDs which are in
 * big endian format, you need to convert them before using this function.
 *
 * @sa RTUUID::Gen
 *
 * @returns iprt status code.
 * @param   pUuid           Where to store result Uuid.
 * @param   pszString       String with UUID text data.
 */
RTDECL(int)  RTUuidFromStr(PRTUUID pUuid, const char *pszString);

/**
 * Converts binary UUID to its UTF-16 string representation.
 *
 * @note See note in RTUuidToStr.
 *
 * @sa RTUUID::Gen
 *
 * @returns iprt status code.
 * @param   pUuid           Uuid to convert.
 * @param   pwszString      Where to store result string.
 * @param   cwcString       pszString buffer length, must be >=
 *                          RTUUID_STR_LENGTH.
 */
RTDECL(int)  RTUuidToUtf16(PCRTUUID pUuid, PRTUTF16 pwszString, size_t cwcString);

/**
 * Converts UUID from its UTF-16 string representation to binary format.
 *
 * @note See note in RTUuidFromStr.
 *
 * @sa RTUUID::Gen
 *
 * @returns iprt status code.
 * @param   pUuid           Where to store result Uuid.
 * @param   pwszString      String with UUID text data.
 */
RTDECL(int)  RTUuidFromUtf16(PRTUUID pUuid, PCRTUTF16 pwszString);

/** @} */

RT_C_DECLS_END

#endif /* !IPRT_INCLUDED_uuid_h */