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-2025 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 */
|