mrc0mmand / rpms / libguestfs

Forked from rpms/libguestfs 3 years ago
Clone

Blame SOURCES/0036-options-Simplify-selector-parsing-for-key-options.patch

46b2f6
From d2ca3f2f9bd9f26cacef2cf2a38e8ac18484d8e4 Mon Sep 17 00:00:00 2001
46b2f6
From: "Richard W.M. Jones" <rjones@redhat.com>
46b2f6
Date: Tue, 26 Nov 2019 12:12:45 +0000
46b2f6
Subject: [PATCH] options: Simplify selector parsing for --key options.
46b2f6
46b2f6
Refactor this code to use guestfs_int_split_string function which
46b2f6
slightly simplifies it.  This should have no effect.
46b2f6
46b2f6
(cherry picked from commit 530d0beef74d48617717463a5b585f21e2ed62be
46b2f6
in libguestfs-common)
46b2f6
---
46b2f6
 common/options/keys.c | 35 ++++++++++++++---------------------
46b2f6
 1 file changed, 14 insertions(+), 21 deletions(-)
46b2f6
46b2f6
diff --git a/common/options/keys.c b/common/options/keys.c
46b2f6
index f783066ff..74b549731 100644
46b2f6
--- a/common/options/keys.c
46b2f6
+++ b/common/options/keys.c
46b2f6
@@ -153,49 +153,42 @@ get_key (struct key_store *ks, const char *device)
46b2f6
 }
46b2f6
 
46b2f6
 struct key_store *
46b2f6
-key_store_add_from_selector (struct key_store *ks, const char *selector_orig)
46b2f6
+key_store_add_from_selector (struct key_store *ks, const char *selector)
46b2f6
 {
46b2f6
-  CLEANUP_FREE char *selector = strdup (selector_orig);
46b2f6
-  const char *elem;
46b2f6
-  char *saveptr;
46b2f6
+  CLEANUP_FREE_STRING_LIST char **fields =
46b2f6
+    guestfs_int_split_string (':', selector);
46b2f6
   struct key_store_key key;
46b2f6
 
46b2f6
-  if (!selector)
46b2f6
-    error (EXIT_FAILURE, errno, "strdup");
46b2f6
+  if (!fields)
46b2f6
+    error (EXIT_FAILURE, errno, "guestfs_int_split_string");
46b2f6
 
46b2f6
-  /* 1: device */
46b2f6
-  elem = strtok_r (selector, ":", &saveptr);
46b2f6
-  if (!elem) {
46b2f6
+  if (guestfs_int_count_strings (fields) != 3) {
46b2f6
    invalid_selector:
46b2f6
-    error (EXIT_FAILURE, 0, "invalid selector for --key: %s", selector_orig);
46b2f6
+    error (EXIT_FAILURE, 0, "invalid selector for --key: %s", selector);
46b2f6
   }
46b2f6
-  key.device = strdup (elem);
46b2f6
+
46b2f6
+  /* 1: device */
46b2f6
+  key.device = strdup (fields[0]);
46b2f6
   if (!key.device)
46b2f6
     error (EXIT_FAILURE, errno, "strdup");
46b2f6
 
46b2f6
   /* 2: key type */
46b2f6
-  elem = strtok_r (NULL, ":", &saveptr);
46b2f6
-  if (!elem)
46b2f6
-    goto invalid_selector;
46b2f6
-  else if (STREQ (elem, "key"))
46b2f6
+  if (STREQ (fields[1], "key"))
46b2f6
     key.type = key_string;
46b2f6
-  else if (STREQ (elem, "file"))
46b2f6
+  else if (STREQ (fields[1], "file"))
46b2f6
     key.type = key_file;
46b2f6
   else
46b2f6
     goto invalid_selector;
46b2f6
 
46b2f6
   /* 3: actual key */
46b2f6
-  elem = strtok_r (NULL, ":", &saveptr);
46b2f6
-  if (!elem)
46b2f6
-    goto invalid_selector;
46b2f6
   switch (key.type) {
46b2f6
   case key_string:
46b2f6
-    key.string.s = strdup (elem);
46b2f6
+    key.string.s = strdup (fields[2]);
46b2f6
     if (!key.string.s)
46b2f6
       error (EXIT_FAILURE, errno, "strdup");
46b2f6
     break;
46b2f6
   case key_file:
46b2f6
-    key.file.name = strdup (elem);
46b2f6
+    key.file.name = strdup (fields[2]);
46b2f6
     if (!key.file.name)
46b2f6
       error (EXIT_FAILURE, errno, "strdup");
46b2f6
     break;
46b2f6
-- 
46b2f6
2.24.1
46b2f6