mirror of
https://xff.cz/git/u-boot/
synced 2025-11-01 19:05:51 +01:00
lib: uuid: introduce uuid_str_to_le_bin function
convert UUID string to little endian binary data Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com> Reviewed-by: Simon Glass <sjg@chromium.org> Cc: Tom Rini <trini@konsulko.com> Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org> Cc: Jens Wiklander <jens.wiklander@linaro.org>
This commit is contained in:
committed by
Tom Rini
parent
d998735179
commit
7048f26ccb
48
lib/uuid.c
48
lib/uuid.c
@@ -1,6 +1,10 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2011 Calxeda, Inc.
|
||||
* Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* Authors:
|
||||
* Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
@@ -354,6 +358,50 @@ int uuid_str_to_bin(const char *uuid_str, unsigned char *uuid_bin,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* uuid_str_to_le_bin() - Convert string UUID to little endian binary data.
|
||||
* @uuid_str: pointer to UUID string
|
||||
* @uuid_bin: pointer to allocated array for little endian output [16B]
|
||||
*
|
||||
* UUID string is 36 characters (36 bytes):
|
||||
*
|
||||
* xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||
*
|
||||
* where x is a hexadecimal character. Fields are separated by '-'s.
|
||||
* When converting to a little endian binary UUID, the string fields are reversed.
|
||||
*
|
||||
* Return:
|
||||
*
|
||||
* uuid_bin filled with little endian UUID data
|
||||
* On success 0 is returned. Otherwise, failure code.
|
||||
*/
|
||||
int uuid_str_to_le_bin(const char *uuid_str, unsigned char *uuid_bin)
|
||||
{
|
||||
u16 tmp16;
|
||||
u32 tmp32;
|
||||
u64 tmp64;
|
||||
|
||||
if (!uuid_str_valid(uuid_str) || !uuid_bin)
|
||||
return -EINVAL;
|
||||
|
||||
tmp32 = cpu_to_le32(hextoul(uuid_str, NULL));
|
||||
memcpy(uuid_bin, &tmp32, 4);
|
||||
|
||||
tmp16 = cpu_to_le16(hextoul(uuid_str + 9, NULL));
|
||||
memcpy(uuid_bin + 4, &tmp16, 2);
|
||||
|
||||
tmp16 = cpu_to_le16(hextoul(uuid_str + 14, NULL));
|
||||
memcpy(uuid_bin + 6, &tmp16, 2);
|
||||
|
||||
tmp16 = cpu_to_le16(hextoul(uuid_str + 19, NULL));
|
||||
memcpy(uuid_bin + 8, &tmp16, 2);
|
||||
|
||||
tmp64 = cpu_to_le64(simple_strtoull(uuid_str + 24, NULL, 16));
|
||||
memcpy(uuid_bin + 10, &tmp64, 6);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* uuid_bin_to_str() - convert big endian binary data to string UUID or GUID.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user