]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
util: Added function to find specific UUID in UUID list.
authorLeonardo da Cunha <leonardo.da.cunha@solidigm.com>
Fri, 15 Dec 2023 15:53:28 +0000 (07:53 -0800)
committerDaniel Wagner <wagi@monom.org>
Thu, 18 Jan 2024 10:33:35 +0000 (11:33 +0100)
Finds a given UUID in the UUID list returned by identify UUID.

Signed-off-by: Leonardo da Cunha <leonardo.da.cunha@solidigm.com>
src/libnvme.map
src/nvme/util.c
src/nvme/util.h

index 742f6356e1bc6cf941a97cba2ed35388167c254b..de36ba14d2dd2f978aaaa7db5c075d49ae87385e 100644 (file)
@@ -1,4 +1,9 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
+LIBNVME_1_8 {
+       global:
+               nvme_uuid_find;
+};
+
 LIBNVME_1_7 {
        global:
                nvme_init_copy_range_f2;
index 45512ff90088198dc335c555a9ae3c40e1189ad8..78ce14f89d1d66d0c5cb54b8226910e62432022c 100644 (file)
@@ -951,6 +951,25 @@ int nvme_uuid_random(unsigned char uuid[NVME_UUID_LEN])
        return 0;
 }
 
+int nvme_uuid_find(struct nvme_id_uuid_list *uuid_list, const unsigned char uuid[NVME_UUID_LEN])
+{
+       const unsigned char uuid_end[NVME_UUID_LEN] = {0};
+
+       if ((!uuid_list) || (!uuid)) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       for (int i = 0; i < NVME_ID_UUID_LIST_MAX; i++) {
+               if (memcmp(uuid, &uuid_list->entry[i].uuid, NVME_UUID_LEN) == 0)
+                       return i + 1;
+               if (memcmp(uuid_end, &uuid_list->entry[i].uuid, NVME_UUID_LEN) == 0)
+                       break;
+       }
+       errno = ENOENT;
+       return -1;
+}
+
 #ifdef HAVE_NETDB
 static bool _nvme_ipaddrs_eq(struct sockaddr *addr1, struct sockaddr *addr2)
 {
index 16d5b9cad98d200f9ed72799256c402eb7896fb5..517c696ca2bc13ba3d13bf3972262d83d01e167b 100644 (file)
@@ -666,6 +666,15 @@ int nvme_uuid_from_string(const char *str, unsigned char uuid[NVME_UUID_LEN]);
  */
 int nvme_uuid_random(unsigned char uuid[NVME_UUID_LEN]);
 
+/**
+ * nvme_uuid_find - Find UUID position on UUID list
+ * @uuid_list: UUID list returned by identify UUID
+ * @uuid:      Binary encoded input UUID
+ *
+ * Return: The array position where given UUID is present, or -1 on failure with errno set.
+ */
+int nvme_uuid_find(struct nvme_id_uuid_list *uuid_list, const unsigned char uuid[NVME_UUID_LEN]);
+
 /**
  * nvme_ipaddrs_eq - Check if 2 IP addresses are equal.
  * @addr1: IP address (can be IPv4 or IPv6)