summaryrefslogtreecommitdiff
path: root/trusty/coverage/uuid.cpp
diff options
context:
space:
mode:
authorTri Vo <trong@google.com>2021-02-26 15:54:47 -0800
committerTri Vo <trong@google.com>2021-02-26 19:14:47 -0800
commit3c8a004a8d715af5fa907aa5fe8cd4af751abfa8 (patch)
treeba80d1487aed8076f9cc43b92d27365b98b9dcaf /trusty/coverage/uuid.cpp
parent1d9764209f344005c5a6efeb069a0924c87b1fb5 (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.cpp44
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;
+}