summaryrefslogtreecommitdiff
path: root/include/iprt/uuid.h
blob: 1a9c9750214ab00916f19b15a4764d075b0322b1 (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
/** @file
 * IPRT - Universal Unique Identifiers (UUID).
 */

/*
 * Copyright (C) 2006-2010 Oracle Corporation
 *
 * This file is part of VirtualBox Open Source Edition (OSE), as
 * available from http://www.virtualbox.org. This file is free software;
 * you can redistribute it and/or modify it under the terms of the GNU
 * General Public License (GPL) as published by the Free Software
 * Foundation, in version 2 as it comes in the "COPYING" file of the
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 *
 * The contents of this file may alternatively be used under the terms
 * of the Common Development and Distribution License Version 1.0
 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
 * VirtualBox OSE 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.
 */

#ifndef ___iprt_uuid_h
#define ___iprt_uuid_h

#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