mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 13:43:28 +00: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:
parent
d998735179
commit
7048f26ccb
2 changed files with 63 additions and 0 deletions
|
@ -2,6 +2,10 @@
|
|||
/*
|
||||
* Copyright (C) 2014 Samsung Electronics
|
||||
* Przemyslaw Marczak <p.marczak@samsung.com>
|
||||
* Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
||||
*
|
||||
* Authors:
|
||||
* Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
|
||||
*/
|
||||
#ifndef __UUID_H__
|
||||
#define __UUID_H__
|
||||
|
@ -44,4 +48,15 @@ int uuid_guid_get_bin(const char *guid_str, unsigned char *guid_bin);
|
|||
const char *uuid_guid_get_str(const unsigned char *guid_bin);
|
||||
void gen_rand_uuid(unsigned char *uuid_bin);
|
||||
void gen_rand_uuid_str(char *uuid_str, int str_format);
|
||||
|
||||
/**
|
||||
* 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]
|
||||
* 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);
|
||||
|
||||
#endif
|
||||
|
|
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.
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue