diff options
author | Tri Vo <trong@google.com> | 2021-02-26 15:54:47 -0800 |
---|---|---|
committer | Tri Vo <trong@google.com> | 2021-02-26 19:14:47 -0800 |
commit | 3c8a004a8d715af5fa907aa5fe8cd4af751abfa8 (patch) | |
tree | ba80d1487aed8076f9cc43b92d27365b98b9dcaf /trusty/coverage/uuid.cpp | |
parent | 1d9764209f344005c5a6efeb069a0924c87b1fb5 (diff) |
trusty: coverage: Add UUID helpers
Function to parse string was borrowed from Trusty.
Bug: 171750250
Test: trusty_test_fuzzer
Change-Id: I8430579f142db2c174874aff373bce6bb868de31
Diffstat (limited to 'trusty/coverage/uuid.cpp')
-rw-r--r-- | trusty/coverage/uuid.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/trusty/coverage/uuid.cpp b/trusty/coverage/uuid.cpp new file mode 100644 index 000000000..f0a6c0ea7 --- /dev/null +++ b/trusty/coverage/uuid.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2021 The Android Open Sourete Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <string.h> +#include <trusty/coverage/uuid.h> +#include <uuid.h> + +#include <stdio.h> + +static uint16_t reverse_u16(uint16_t u) { + return u << 8 | u >> 8; +} + +static uint32_t reverse_u32(uint32_t u) { + return reverse_u16((uint16_t)u) << 16 | reverse_u16(u >> 16); +} + +bool str_to_uuid(const char* str, struct uuid* uuid) { + uuid_t uu; + static_assert(sizeof(uu) == sizeof(*uuid)); + + if (uuid_parse(str, uu)) { + return false; + } + + memcpy(uuid, uu, sizeof(*uuid)); + uuid->time_low = reverse_u32(uuid->time_low); + uuid->time_mid = reverse_u16(uuid->time_mid); + uuid->time_hi_and_version = reverse_u16(uuid->time_hi_and_version); + return true; +} |